Как получить доступ к объекту Vue в модуле Vuex? - PullRequest
0 голосов
/ 18 октября 2018

В компонентах Vue я могу легко использовать импортированные библиотеки, такие как vue-router.Я могу получить доступ к нужному параметру маршрута с помощью this.$route.params.myVar.Однако, если я пытаюсь сделать то же самое в модуле Vuex, я получаю ошибку: TypeError: Cannot read property 'myVar' of undefined.Как я могу расширить объект Vue, который я определил в моем main.js, на мои модули?

Вот мои 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.

1 Ответ

0 голосов
/ 18 октября 2018

На мой взгляд, у вас есть два варианта.

  • Передача param.myvar извне внутри действия vuex
  • Импорт маршрутизатора в модуль vuex и использование его

Для второго варианта обязательно импортируйте декларацию вашего маршрутизатора, а не библиотеку.Например.

import router from '@/router'

router.currentRoute.params.myVar
...