javascript - Vue.js - Mendapatkan rute saat ini di modul Vuex


Saya memiliki store Vuex dengan namespace yang mengembalikan sebuah entri dari store berdasarkan parameter dari rute saat ini.

import Router from '../../router/index'

const options = {
  routeIdentifier: 'stepId'
}

export function fromRoute(state) {
  if (!options.routeIdentifier || !Router.currentRoute.params) {
    return null
  }

  return state.all.find(element => {
    return element.identifier === Router.currentRoute.params[options.routeIdentifier]
  })
}

Ini berfungsi seperti yang diharapkan saat pemuatan awal. Namun, itu tidak dimuat ulang setiap kali rute berubah.

Apakah ada cara untuk memuat ulang/memaksa perhitungan ulang getter saat rute berubah?

Jawaban #1

Akan lebih didukung untuk mengimpor store di modul router daripada sebaliknya. Anda dapat menggunakan beforeEach navigation guard untuk mengatur rute saat ini di store. Pertama, siapkan store:

store.js

state: {
  route: null
},
mutations: {
  SET_ROUTE(state, route) {
    state.route = route;
  }
},
modules: { ... }

Dalam modul router, gunakan penjaga beforeEach untuk menyimpan rute saat ini, yang merupakan argumen to:

router.js

import store from '@/store';  // Import the store in the router module

const router = new VueRouter({
  ...
})

router.beforeEach((to, from, next) => {
  store.commit('SET_ROUTE', to);
  next();
});

Untuk mengakses rute ini dalam getter modul Vuex, akses melalui argumen getter ketiga, rootState:

store/someModule.js

getters: {
  getRoute(state, getters, rootState) {
    return rootState.route;
  }
}