我在我的vuex store.js中使用来自集中状态管理的vuex我将登录状态存储为布尔值,如下所示
export const store = new Vuex.Store({
state: {
loggedIn: false,
userName: 'Guest',
error: {
is: false,
errorMessage: ''
}
},
getters: {
g_loginStatus: state => {
return state.loggedIn;
},
g_userName: state => {
return state.userName;
},
g_error: state => {
return state.error;
}
}
)};
当用户登录时我将loginstatus设置为true并删除登录按钮并将其替换为注销按钮一切正常但问题是当用户登录时如果我直接在搜索栏中输入登录组件的路径我能够再次导航到登录页面我想要预防此行为如果登录使用并在搜索栏中搜索登录页面的路径,则必须将其重定向到主页
我已尝试在登录组件中使用 beforeRouteEnter 但我们没有访问 this 实例,因为组件尚未加载所以我如何从我的商店检查登录状态
我在login.vue中的脚本
script>
export default{
data(){
return{
email: '',
password: ''
};
},
methods: {
loginUser(){
this.$store.dispatch('a_logInUser', {e: this.email, p: this.password}).then(() =>{
this.$router.replace('/statuses');
});
}
},
beforeRouteEnter (to, from, next) {
next(vm => {
if(vm.$store.getters.g_loginStatus === true){
//what shall i do here
}
})
}
}
2 回答
您可以将用户重定向到主页或其他相关页面:
来自docs:
将导航警卫放在不在页面/组件中的路径中并在路由文件上调用状态getter要好得多 .
您还可以使用vue-router-sync软件包获取商店值的值