在Vue组件中,我可以轻松使用导入的库,例如vue-router
。我可以使用this.$route.params.myVar
访问所需的route参数。但是,如果我尝试在Vuex模块中执行相同的操作,则会收到错误:TypeError: Cannot read property 'myVar' of undefined
。如何将在main.js
中定义的Vue对象扩展到模块?
这是我的main.js
:
import router from './router'
import Vuex from 'vuex'
import myModule from './my.module';
Vue.use(Vuex)
// Register VueX modules
const store = new Vuex.Store({
modules: {
myModule
}
})
new Vue({
router,
render: h => h(App),
store
}).$mount('#app')
还有my.module.js
:
export default {
namespaced: true,
state: {
...
},
mutations: {
...
},
actions: {
someAction() {
console.log(this.$route.params.myVar)
}
}
}
很明显,this
没有定义。我尝试在模块顶部实例化一个新的Vue对象,如下所示:
var vm = new Vue()
并将this
更改为vm
,但出现类似的Cannot read property 'myVar' of undefined
错误。我还尝试在模块中重新实例化route
类:
import route from 'vue-router'
并将失败的代码更改为route.params.myVar
,但仍然出现Cannot read property 'myVar' of undefined
错误。
答案 0 :(得分:1)
从我的角度来看,您有两个选择。
对于第二个选项,请确保导入您的路由器声明而不是库。例如。
import router from '@/router'
router.currentRoute.params.myVar