vue导航守卫

一、 全局前置导航守卫         处理所有的路由---->具体栗子 :用户未登录 访问首页  直接next()到登录页面

1 const router = new VueRouter({ ... })
2 
3 router.beforeEach((to, from, next) => {
4   // ...
5 })

三个参数: to  去哪个路由对象   

                   from   从哪个路由对象离开

                    netx()  进行管道中的下一个钩子函数    next(false): 中断当前的导航。next(‘/‘) 或者 next({ path: ‘/‘ }): 跳转到一个不同的地址。

二、全局后置导航守卫     处理所有的路由

1 router.afterEach((to, from) => {
2   // ...
3 })

只有两个参数 to  from 没有next()钩子  使用较少

三、路由内独享的守卫   针对单个路由规则

 1 const router = new VueRouter({
 2   routes: [
 3     {
 4       path: ‘/foo‘,
 5       component: Foo,
 6       beforeEnter: (to, from, next) => {
 7         // ...
 8       }
 9     }
10   ]
11 })

这些守卫与全局前置守卫的方法参数是一样的。 只不过是 只对 /foo 路由 规则有效

四、组件内的守卫  针对单个组件

  • beforeRouteEnter          进入该组件件时调用此路由守卫  ---具体栗子 :用户未登录 访问首页  直接next()到登录页面
  • beforeRouteUpdate (2.2 新增)         在当前路由改变(/foo/1 和 /foo/2 之间跳转的时候
    )会有一个问题   由于该组件被复用   组件没有被销毁   导致写在created钩子函数的数据请求函数只会在页面创建的时候执行一次   跳转的时候不会再次执行请求数据    解决方法  : 在next()钩子函数后面 重新调用请求数据的方法 就可以请求数据
  • beforeRouteLeave          离开该组件件时调用此路由守卫   离开时做一些表单提交的提醒  
 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 }

 

vue导航守卫

上一篇:vector


下一篇:CentOS8是使用mdadm实现软RAID