【问题标题】:Unable to create Vue Router instance in JavaScript无法在 JavaScript 中创建 Vue 路由器实例
【发布时间】:2017-04-11 05:05:36
【问题描述】:

the guide 之后,我到了需要创建 Vue 实例的地方(这似乎可以工作)。不过我还需要在Vue的构造函数中提供一个Vuew Router的实例,如下图。

const router = new VueRouter({ routes });
const app = new Vue({ router }).$mount('#app');

很遗憾,它会产生以下错误。我非常不确定如何处理它,并且在googlearching 时似乎很少记录故障排除。

Uncaught ReferenceError: VueRouter is not defined(…)

我确保我已经安装了这两个软件包,以及一些额外的。

+-- vue@2.0.8
+-- vue-cli@2.5.1
+-- vue-router@2.0.3

我还没有为下面的这两个实现导入(真的不知道在哪里放入代码,当我尝试使用我的 index.js 时,它吠叫不识别令牌)。但是,我认为这些不是必需的,因为 Vue 仍然可以识别,只有它的路由器无法识别。如果导入很重要,我感觉如果省略两者都会失败。

import Vue from 'vue'
import VueRouter from 'vue-router'

整个事情特别棘手,因为决定在 Net.Core 而不是 NodeJs 下运行它,所以我可能会受到限制。我们不会使用 Webpack 或 Browserify 来保持进程运行(而是使用普通的 dotnet 运行)。在这个阶段不确定它是否是相关信息,但我读到它应该是“哦,如此简单和容易”,但坦率地说,它似乎一点也不简单和容易。所以我怀疑如果部署在某个环境中很容易,但在我的情况下需要一些手动按摩。

我可以通过什么调查进一步调查此问题?

【问题讨论】:

    标签: javascript routing vue.js .net-core vue-router


    【解决方案1】:

    以下是 vue-router 的基本设置,但是是的,您肯定需要导入 vue 和 vue-router 才能按原样引用它们:

    import Vue from 'vue';
    import VueRouter from 'vue-router';
    
    Vue.use( VueRouter );
    
    const Foo = { template: '<div>foo</div>' }
    const Bar = { template: '<div>bar</div>' }
    
    const routes = [
      { path: '/foo', component: Foo },
      { path: '/bar', component: Bar }
    ]
    
    const router = new VueRouter({
      routes
    })
    
    const app = new Vue({
      router
    }).$mount('#app')
    <div id="app">
      <h1>Hello App!</h1>
      <p>
        <router-link to="/foo">Go to Foo</router-link>
        <router-link to="/bar">Go to Bar</router-link>
      </p>
      <router-view></router-view>
    </div>

    您必须设置导入功能才能使其正常工作,尽管我从另一个问题中知道这很棘手。

    如果您必须放弃导入,您可以只链接到 html 中的库并省略顶部的 2 条导入行,即

    Vue.use( VueRouter );
    
    const Foo = { template: '<div>foo</div>' }
    const Bar = { template: '<div>bar</div>' }
    
    const routes = [
      { path: '/foo', component: Foo },
      { path: '/bar', component: Bar }
    ]
    
    const router = new VueRouter({
      routes
    })
    
    const app = new Vue({
      router
    }).$mount('#app')
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router@2.0.3"></script>
    <div id="app">
      <h1>Hello App!</h1>
      <p>
        <router-link to="/foo">Go to Foo</router-link>
        <router-link to="/bar">Go to Bar</router-link>
      </p>
      <router-view></router-view>
    </div>

    【讨论】:

    • 第二个例子有效。第一个在我的浏览器中产生错误。是因为被嵌入了吗?
    • 是的,我想这与您之前遇到的问题相同 - 您的设置不允许您导入包。这是您必须解决的 babel / ES6 编译问题。有没有一种简单的方法可以从 DotNet 中断应用程序的构建,以便您可以使用 webpack 或 browserify 来构建它?你不能从dotnet run 调用命令吗?如果可以的话,你可以安装一个 vue-cli 设置的 vue,然后调用它的 npm run dev 命令来构建输出。
    • 这开始变得很荒谬 - 我复制了您提供的第二个示例,但它仍然不起作用,看在鸭子的份上(故意错字)。然后我开始四处寻找,我意识到 - 是执行的顺序搞砸了。我将 Vue 相关的 JS 放在我的 onload 中,但我应该在创建应用程序 div 之后执行 Vue 相关的东西 。当我搬到一个完全空白的文件时,它起作用了。这需要一种高度反直觉的方法。它应该会自己嘎嘎作响(再一次,故意打错),哈哈哈。
    • 我已经接近 10k 代表了,所以我不想花任何钱。但我会请一个朋友为此提供赏金,因为我觉得你做得很棒。努力应该得到回报!
    • @KonradViltersten 只要您的后端服务器使用 http/https 就应该没问题;)基本上,您只需设置一个前端开发服务器,该服务器在您编辑时转换您的前端 src 文件,然后重新加载浏览器为你。我们这里的GuyC已经多次推荐了官方vue-cli。我个人使用 fountain-vue 而不是 vue-cli。
    猜你喜欢
    • 2020-02-18
    • 2020-10-11
    • 2021-08-25
    • 2017-05-29
    • 2020-06-29
    • 1970-01-01
    • 2019-10-07
    • 2018-04-13
    • 2018-06-17
    相关资源
    最近更新 更多