vue-router 中的导航钩子由那些?
2021-09-21 12:21:34 大约 2 分钟
# 全局钩子函数
- beforeEach (to,from,next) 路由改变前调用 ,常用验证用户权限。
- 参数
- to :即将要进入的目标路由对象
- from:当前正要离开的路由对象
- next:路由控制参数
- next():如果一切正常,则调用这个方法进入下一个钩子
- next(false):取消导航(即路由不发生改变)
- next('/login'):当前导航被中断,然后进行一个新的导航
- next(error):如果一个Error实例,则导航会被终止且该错误会被传递给 router.onError ()
- afterEach (to,from) 路由改变后的钩子
- 常用自动让页面返回最顶端
- 用法相似,少了next参数
# 路由配置中的导航钩子
beforeEnter (to,from,next)
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // ... }, beforeEnter: (route) => { // ... } } ] });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 组件内的钩子函数
beforeRouteEnter (to,from,next)
- 该组件的对应路由被 comfirm 前调用。
- 此时实例还没被创建,所以不能获取实例(this)
beforeRouteUpdate (to,from,next)
- 当前路由改变,但改组件被复用时候调用
- 该函数内可以访问组件实例(this)
beforeRouteLeave (to,from,next)
- 当导航离开组件的对应路由时调用。
- 该函数内可以访问获取组件实例(this)
const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 因为当钩子执行前,组件实例还没被创建 }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 可以访问组件实例 `this` }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 可以访问组件实例 `this` } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 路由监测变化
监听到路由对象发生变化,从而对路由变化做出响应
const user = {
template: '<div></div>',
watch: {
'$route'(to, from) {
// 对路由做出响应
// to , from 分别表示从哪跳转到哪,都是一个对象
// to.path ( 表示的是要跳转到的路由的地址 eg: /home );
},
},
}
// 多了一个watch,这会带来依赖追踪的内存开销,
// 修改
const user = {
template: '<div></div>',
watch: {
'$route.query.id' {
// 请求个人描述
},
'$route.query.page' {
// 请求列表
},
},
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 总结
路由中的导航钩子有三种
- 全局
- 组件
- 路由配置
监听路由变化怎么做
- 使用watch 来对$route 监听