vue的路由守卫
vue的路由守卫
1.前置路由
vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。言下之意就是当vue route方式改变时,就会触发路由守卫进行回调一些相关的回调函数。
//前置守卫
//to: Route: 即将要进入的目标 路由对象
//from: Route: 当前导航正要离开的路由
//next: Function: 一定要调用该方法来 resolve 这个钩子。
router.beforeEach((to, from, next) => {
//通过beforeEach,可以将路跳转前的一些路由信息继续保存
// 如:将当前路由信息保存到data中的path去
this.path = this.$route.path
next();
})
activated(){
//通过添加activated周期函数,可以将保存的路由继续读出
//这样用户回退到上一页,页面还可以保存之前用户浏览的状态了
this.$router.push(this.path)
}
当然要保存信息,当然要确保路由对应的组件在路由跳转时不会被销毁,所以要把组件组件状态缓存下来,这个可以通过keep-alive来实现
<keep-alive></keep-alive>
2.后置钩子
你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 next
函数也不会改变导航本身:
router.afterEach((to, from) => {
// 路由跳转后想干的事情
})
还有很多其他的守卫,这里就不一一列出了,详细看页面最下方的官方的路由守卫页信息。
3.守卫的位置
守卫又分全局的, 单个路由独享的, 或者组件级的,这个很简单,只有确定守卫位置,就能知道守卫的作用域了。
全局
const router = new VueRouter({ ... })
//全局就是写在外面
router.beforeEach((to, from, next) => {
// ...
})
路由独享
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
//写在routes里面的,就是该路由独享
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
组件内
const Foo = {
template: `...`,
//写在组件里面的,就是该组件独享
beforeRouteEnter (to, from, next) {
//...
}
}
4.完整的导航解析流程
这个是官方给出的导航解析流程,这里描述了守卫触发的顺序。
- 导航被触发。
- 在失活的组件里调用
beforeRouteLeave
守卫。 - 调用全局的
beforeEach
守卫。 - 在重用的组件里调用
beforeRouteUpdate
守卫 (2.2+)。 - 在路由配置里调用
beforeEnter
。 - 解析异步路由组件。
- 在被激活的组件里调用
beforeRouteEnter
。 - 调用全局的
beforeResolve
守卫 (2.5+)。 - 导航被确认。
- 调用全局的
afterEach
钩子。 - 触发 DOM 更新。
- 调用
beforeRouteEnter
守卫中传给next
的回调函数,创建好的组件实例会作为回调函数的参数传入。
5.详细解释
这里给出官方文档的位置:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)