我花了整整一天的时间来弄清楚导致此示例失败的原因:



Vue.use(VueRouter);

var PlayerDetail =  {
  template: '<div>FOO</div>'
};
var PlayerList =  {
  template: '<div>BAR</div>'
};

var routes = [{
  path: '/player',
  component: PlayerList
}, {
  path: '/detail',
  component: PlayerDetail
}];

var appRouter = new VueRouter({
  routes
});

var appVm = new Vue({
  appRouter
}).$mount('#app');

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
  <h1>Hello App!</h1>
  <p>
    <router-link to="/player">foo</router-link>
    <router-link to="/detail">bar</router-link>
  </p>
  <router-view></router-view>
</div>





如果正是这样的话,那就行了:



Vue.use(VueRouter);

var Foo = {
  template: '<div>FOO</div>'
};
var Bar = {
  template: '<div>BAR</div>'
};

var routes = [{
  path: '/foo',
  component: Foo
}, {
  path: '/bar',
  component: Bar
}];

var router = new VueRouter({
  routes
});

var appVm = new Vue({
  router
}).$mount('#app');

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
  <h1>Hello App!</h1>
  <p>
    <router-link to="/foo">foo</router-link>
    <router-link to="/bar">bar</router-link>
  </p>
  <router-view></router-view>
</div>





如您所见,这两个示例实际上是相同的代码,但是在第一个示例中,我得到TypeError:在渲染路由器时未定义route。

还有其他人看到我在这里想念的东西吗?

最佳答案

您正在传递Vue构造函数{ appRouter },它是{ appRouter: appRouter }的简写。 Vue构造函数期望的对象具有router属性,而不是appRouter属性。

如果要使用对象属性的简写形式将其传递给路由器对象router,则需要准确命名它:



Vue.use(VueRouter);

var PlayerDetail =  {
  template: '<div>FOO</div>'
};
var PlayerList =  {
  template: '<div>BAR</div>'
};

var routes = [{
  path: '/player',
  component: PlayerList
}, {
  path: '/detail',
  component: PlayerDetail
}];

var router = new VueRouter({
  routes
});

var appVm = new Vue({
  router
}).$mount('#app');

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
  <h1>Hello App!</h1>
  <p>
    <router-link to="/player">foo</router-link>
    <router-link to="/detail">bar</router-link>
  </p>
  <router-view></router-view>
</div>

08-07 09:22