想做一个路由拦截:
- 在
Vuex
中有用户的状态,其中一个属性是:user
- 当
user
为空时说明未登录,跳转到登录页面 - 当
user
不为空时,说明已经登录,直接路由到下一个页面
代码是这样的:
-
router/index.js
文件
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router ({
mode: 'history',
routes: [...],
scrollBehavior: (to, from, savedPosition) => {
return savedPosition || {x: 0, y: 0}
}
})
-
main.js
文件
import router from './router'
new Vue({
router,
})
router.beforeEach((to, from, next) => {
// 这里会持续性的输出 null
alert(JSON.stringify(store.state.user.user))
if(store.state.user.user !== null){
next()
}else {
alert('用户尚未登录')
next({
path: '/login',
query: {redirect: to.fullPath}
})
}
})
// 运行的结果是,持续性的输出:
// null
// 用户尚未登录
// 循环不断...
问题就是:
- 该如何解决?
- 什么原因造成的?