Ich habe folgende Vuex Speicher (main.js):Zugreifen Vuex Zustand bei der Definition Vue-Router Routen
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
//init store
const store = new Vuex.Store({
state: {
globalError: '',
user: {
authenticated: false
}
},
mutations: {
setGlobalError (state, error) {
state.globalError = error
}
}
})
//init app
const app = new Vue({
router: Router,
store,
template: '<app></app>',
components: { App }
}).$mount('#app')
I haben auch die folgenden Routen definiert, für Vue-Router (routes.js):
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
//define routes
const routes = [
{ path: '/home', name: 'Home', component: Home },
{ path: '/login', name: 'Login', component: Login },
{ path: '/secret', name: 'Secret', component: SecretPage, meta: { requiresLogin: true }
]
ich versuche, es zu machen, so dass, wenn das user
des Vuex Speicherobjekt hat authenticated
Eigenschaft falsch ist, haben sie den Router die Benutzer auf die Login-Seite umleiten.
Ich habe dies:
Router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresLogin) && ???) {
// set Vuex state's globalError, then redirect
next("/Login")
} else {
next()
}
})
Das Problem ist, ich weiß nicht, wie der user
Objekt Vuex-Speichers zuzugreifen aus dem Innern der Funktion before.
Ich weiß, dass ich die Router guard Logik innerhalb Komponenten kann BeforeRouteEnter
verwenden, aber das würde jede Komponente verunstaltet. Ich möchte es stattdessen zentral auf der Router-Ebene definieren.
Dank Saurabh, das ist genau das, was ich am Ende tun. Ich wähle deine Antwort aus, da sie umfassender ist als meine. :) –