vue-router守卫
导航守卫 router.beforeEach 全局前置守卫
-
- to: Route: 即将要进入的目标(路由对象)
- from: Route: 当前导航正要离开的路由
- next: Function: 一定要调用该方法来 resolve 这个钩子。(一定要用这个函数才能去到下一个路由,如果不用就拦截) 执行效果依赖 next 方法的调用参数。
- next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
- next(false): 取消进入路由,url地址重置为from路由地址(也就是将要离开的路由地址)。
-
1 // main.js 入口文件 2 import router from './router'; // 引入路由 3 router.beforeEach((to, from, next) => { 4 next(); 5 }); 6 router.beforeResolve((to, from, next) => { 7 next(); 8 }); 9 router.afterEach((to, from) => { 10 console.log('afterEach 全局后置钩子'); 11 });
路由独享的守卫 你可以在路由配置上直接定义 beforeEnter 守卫
-
1 const router = new VueRouter({ 2 routes: [ 3 { 4 path: '/foo', 5 component: Foo, 6 beforeEnter: (to, from, next) => { 7 // ... 8 } 9 } 10 ] 11 })
组件内的守卫 你可以在路由组件内直接定义以下路由导航守卫
-
1 const Foo = { 2 template: `...`, 3 beforeRouteEnter (to, from, next) { 4 // 在渲染该组件的对应路由被 confirm 前调用 5 // 不!能!获取组件实例 `this` 6 // 因为当守卫执行前,组件实例还没被创建 7 }, 8 beforeRouteUpdate (to, from, next) { 9 // 在当前路由改变,但是该组件被复用时调用 10 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, 11 // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 12 // 可以访问组件实例 `this` 13 }, 14 beforeRouteLeave (to, from, next) { 15 // 导航离开该组件的对应路由时调用,我们用它来禁止用户离开 16 // 可以访问组件实例 `this` 17 // 比如还未保存草稿,或者在用户离开前, 18 将setInterval销毁,防止离开之后,定时器还在调用。 19 } 20 }
世界上没有什么偶然,有的只有必然。——壹原侑子