【问题标题】:Cannot read property '_router' of undefined Vue js无法读取未定义的 Vue js 的属性“_router”
【发布时间】:2018-07-15 07:27:12
【问题描述】:

我正在尝试使用 vue-router 将数据从一个组件重定向并传递到另一个组件。

在我的主要组件中,我有一个点击链接,我在其中调用 JavaScript 函数来进行路由。

<a href="javascript:void(0);" @click="switchComponent('ToolDetail')">click here</a>

methods: {
   switchComponent(comp) {
   this.$router.push({name:comp});
},

到目前为止,单击链接时路由本身会出现控制台错误。

未捕获的类型错误:无法读取未定义的属性“_router”

在我的 main.js 中,我已经导入了我的路由器-

import Vue from 'vue'
import App from './App.vue'
import router from 'vue-router'

Vue.config.productionTip = false
export const changeRoute = new Vue();
new Vue({
  render: h => h(App)
}).$mount('#app')

Vue.use(router)

编辑: 根据@ittus 的回答,我做了这样的事情-

在我的 main.js-

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

Vue.config.productionTip = false

new Vue({
  render: h => h(App)
}).$mount('#app')

在我的HomeContent.vue-

<template>
    ...
    ..
    <a href="javascript:void(0);" @click="switchComponent('ToolDetail')">click here</a>
    ...
    ..
</template>
<script>
import ToolDetail from './ToolDetail.vue';
import VueRouter from 'vue-router';

...
..

methods: {
   switchComponent(comp) {
      const routes = [
        { path: '/ToolDetail', component: ToolDetail, name: 'ToolDetail' }
      ]
      const router = new VueRouter({
        routes
      })
      router.push({name:'ToolDetail'});
  },

...
..
</script>

现在,当我单击链接时,没有任何反应,也没有控制台错误。 请问有什么帮助吗?如果我可以提供更多详细信息,请告诉我。

【问题讨论】:

  • 您确定 - HomeContent.vue 将其导出到 App.vue 文件中吗?同时确保您在 HomeContent.vue 中正确使用 export

标签: javascript vue.js vue-router


【解决方案1】:

你需要将router数据传递给Vue组件

import Vue from 'vue'
import App from './App.vue'
import Router from 'vue-router'

Vue.config.productionTip = false
export const changeRoute = new Vue();

Vue.use(Router) // should place it before new Vue()

// just example
const router = new Router({
  routes: [
    {
      path: '/',
      name: 'ToolDetail',
      component: ToolDetail // place your component here
    }
  ]
})

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

您可以在Getting Started document查看更多详情

【讨论】:

  • 我的App.vue 是加载其他组件的主要组件。另外,我在我的main.js 中导入vue-rouer,它有new Vue({..})。如何导入ToolDetail 组件并在此基础上创建routes: []
  • 根据您的回答更新了帖子。请检查。
  • 您需要在main.js 组件中设置路由器,而不是在HomeContent.vue 中。不是在main.js,你需要通过routernew Vue({ router, render: h =&gt; h(App) }).$mount('#app')
猜你喜欢
  • 2020-10-09
  • 2021-08-28
  • 2018-05-08
  • 2017-04-21
  • 2020-08-08
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多