团购网站html模板,我的网站模板下载,个性菜单 wordpress,网站建设项目总结报告什么是路由守卫#xff1f;
路由守卫就是路由跳转的一些验证#xff0c;比如登录鉴权#xff08;没有登录不能进入个人中心页#xff09;等等等 路由守卫分为三大类#xff1a; 全局守卫#xff1a;前置守卫#xff1a;beforeEach 后置钩子#xff1a;afterEach 单个…什么是路由守卫
路由守卫就是路由跳转的一些验证比如登录鉴权没有登录不能进入个人中心页等等等 路由守卫分为三大类 全局守卫前置守卫beforeEach 后置钩子afterEach 单个路由守卫独享守卫beforeEnter 组件内部守卫beforeRouteEnter beforeRouteUpdate beforeRouteLeave 所有的路由守卫都是三个参数 to 要进入的目标路由去哪儿 from 要离开的路由从哪来 next 是否进行下一步要不要继续
写next()相当于 next(true) 继续执行
不写 相当于next(false)终止执行
next(path)跳转 例如next(/login) 注意后置钩子afterEach没有next参数,我们来详细看看都是怎么使用的叭 全局守卫
全局前置守卫beforEach
给需要守卫的路由加上 meta: { permission: true },
router.beforeEach((to, from, next) {if (to.meta.permission) {if (sessionStorage.getItem(token)) {next();} else {alert(请先登录);next(/login);}} else {next();}
});全局后置钩子afterEach少用
router.afterEach((to, from) {// to and from are both route objects.
});单个路由守卫 // 首页模块路由{path: /index,name: index,meta: { permission: true },component: () import(../views/Index.vue),beforeEnter: function(to, from, next) {if (sessionStorage.getItem(token)) {next();} else {alert(请先登录);next(/login);}}},组件内部守卫
和data、created、mounted、methods处于平等关系
用beforeRouteEnter举例说明 beforeRouteEnter(to, from, next) {// 在渲染该组件的对应路由被 confirm 前调用// 不能获取组件实例 this// 因为当守卫执行前组件实例还没被创建if (sessionStorage.getItem(token)) {next();} else {alert(请先登录);next(/login);}},beforeRouteUpdate(to, from, next) {// 在当前路由改变但是该组件被复用时调用// 可以访问组件实例 this},beforeRouteLeave(to, from, next) {// 导航离开该组件的对应路由时调用// 可以访问组件实例 this},beforeRouteEnter 是进入前
beforeRouteUpdate 是路由变化时
beforeRouteLeave 是离开后。这个离开守卫通常用来禁止用户在还未保存修改前突然离开。该导航可以通过 next(false) 来取消。 注意 beforeRouteEnter 守卫 不能 访问 this因为守卫在导航确认前被调用因此即将登场的新组件还没被创建。 vue2、vue3中路由守卫变化
router.beforeEach((to,from){// 现在next可选// vue2 :// 写next()相当于 next(true) 继续执行// 不写 相当于next(false)终止执行// next(path) 跳转指定路由(重定向) //--------------------------------// vue3 :// 返回true | undefined 放行// 返回false取消// 返回路由地址(对象格式) 重定向})例子
// 访问权限控制
router.beforeEach((to) {// 用户仓库const store useUserStore()// 不需要登录的页面白名单const wihteList [/login]// 如果没有登录(pinia中没有token)且不在白名单内去登录if (!store.user?.token !wihteList.includes(to.path)) return /login// 否则不做任何处理,什么都不返回则默认返回undefined
})