vue-router的权限控制
前几天重新对vue-router看了一遍,记录了一下大概的vue-router功能,如下:
- 动态路由
- 嵌套路由
- 访问路由
- 路由name
- 重定向
- 别名 alia
- 参数
- 路由守卫
- 过渡动画
- 数据获取
- 滚动行为
- 懒加载
今天来对于权限控制 (路由守卫) 来深入一下
基本上所有对于权限控制的操作都可以在路由守卫中做。
路由守卫 基于 router 的方法 beforeEach
全局守卫
下面就是一个简单的全局守卫的写法1
2
3
4
5const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
如果有多个 全局守卫 ,则会按照声明顺序依次进行验证。
每个守卫接收三个参数:
to: Route: 即将要进入的目标 路由对象
from: Route: 当前导航正要离开的路由
next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
确保要调用 next 方法,否则钩子就不会被 resolved。
全局后置钩子
你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 next 函数也不会改变导航本身:1
2
3
4
router.afterEach((to, from) => {
// ...
})
独享守卫
路由独享
是某一个路由 独有的守卫1
2
3
4
5
6
7
8
9
10
11const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
beforeEnter 的参数和 beforeEach 的是一样的。
组件独享
可以在路由组件内直接定义以下路由导航守卫:
- beforeRouteEnter
- beforeRouteUpdate (2.2 新增)
- beforeRouteLeave
1 | const Foo = { |
例子
1 | router.beforeEach((to, from,next) => { |
最后在强调,beforeEach 必须要调用next方法 next的参数可见 https://router.vuejs.org/zh-cn/advanced/navigation-guards.html