我有以下Vuex存儲(main.js):訪問Vuex狀態
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')
我也有以下路線的Vue-路由器定義(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 }
]
我想使它如此,如果Vuex商店的user
對象具有authenticated
屬性爲false,讓路由器將用戶重定向到登錄頁面。
我有這樣的:
Router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresLogin) && ???) {
// set Vuex state's globalError, then redirect
next("/Login")
} else {
next()
}
})
的問題是我不知道如何從beforeEach函數內部訪問Vuex商店的user
對象。
我知道我可以使用BeforeRouteEnter
在組件內部使用路由器保護邏輯,但是這會混淆每個組件。我想在路由器層面集中定義它。
謝謝Saurabh,這正是我最終做的。我會選擇你的答案,因爲它比我的更廣泛。 :) –