路由守卫beforeEach

1.关于vueX命名空间的问题

在store文件夹下建立如图所示文件结构:
在这里插入图片描述

其中app.js文件中的代码如下

/ 储存
const state = {
    token:null
}

// 同步
const mutations = {
    SET_TOKEN: (state,token) =>{
        state.token = token
    }
}

// 异步修改
const actions = {
    setToken:({commit},token)=>{
        commit('SET_TOKEN',token)
    }
}

export default {
    namespaced: true,//外部获取属性时添加模块名(文件名)  例:store.state.app.token
    state,
    mutations,
    actions
  }

想在其他组件中调用app.js中的setToken方法:

this.$store.dispatch('app/setToken')//注意:方法名setToken之前一定要加模块名app

2.路由守卫beforeEach

路由守卫:路由跳转之前执行的操作,只要路由发生改变,都会执行beforeEach。

在main.js文件中建立路由守卫,也可以在router文件夹下新建一个js文件,如:premit.js,但要记得在main.js中引入该文件:import “./router/premit”,路由守卫代码如下所示:

import router from './index';
import {getToken} from '@/store.js';
const whiteRouter =['/login'];
router.beforeEach((to,from,next)=>{
	if(getToken()){
		next();//允许跳转
	}else{
		if(whiteRouter.indexOf(to.path) !==-1){//indexOf方法,判断数据中是否存在指定的某个对象,如果不存在,则返回-1
			next();					   //要跳转的路由是login,则执行next()
		}else{
			next('/login')
		}
	}
//to即将跳转的路由,
//from上一个路由
//next的写法有三种:next():直接执行to里面的钩子函数;  next(false):中断当前导航;next({path:'/'}):跳转到指定路由,该写法会造成死循环,路由只能跳转到指定的路由
})
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值