• vue-router的钩子函数


    前言

    路由钩子函数有3个参数

    to:表示路由要去哪里(是一个对象类型)

    from:表示路由从哪里来(是一个对象类型)

    next:next()执行管道中的下一个钩子;next(false)中断导航,浏览器的地址会重置到from地址;next({path:"/'})跳转到path路径对应的地址,该方法在afterEach钩子函数中不存在

    路由钩子函数可分为2类:全局类和局部类

    全局类

    全局类就是针对整个路由的操作,每次跳转都会执行全局类的钩子函数

    全局前置守卫beforeEach

    进入路由之前,执行的方法,通常做的就是在这里验证是否登录,没有登录就返回.

    这里要注意next指定路径的时候需要做判断,以免死循环

    var router = new VueRouter({
          routes: [
            {
              path: "/login",
              component: {
                template: `<div>login page</div>`
              }
            },
            {
              path: '/position',
              component: position,
              meta: {
                auth: true
              }
            },
            {
              path: '/search/:keyword',
              component: search
            }
          ]
        }) 
    router.beforeEach((to, from, next) => {
          console.log('beforeEach', to, from)
          // //....
          //islogin的判断就是为了防止死循环
          if (!islogin && to.meta.auth) {
            islogin = true;
            next({
              path: '/login'
            });
          } else {
            next();
          }
        })

    全局解析守卫beforeReslove

    在导航确认之前,同时在所有组件内守卫和异步路由组件解析完之后调用

    全局后置钩子afterEach

    该钩子函数特殊的是没有next方法,只有to和from

    在路由跳转成功后执行该函数

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

    局部类

    路由独享守卫beforeEnter

    写在路由配置表中的配置项,表示当前路由进入之前.和beforeEach类似,但是beforeEach针对所有路由进入前,而beforeEnter只针对某一个路由进入前

    const router = new VueRouter({
      routes: [
        {
          path: '/foo',
          component: Foo,
          beforeEnter: (to, from, next) => {
            // ...
          }
        }
      ]
    })

    组件内的守卫

    beforeRouteEnter

    在进入当前模块之前的函数,我们可以通过它来确定是否进入当前模块

    const Foo = {
      template: `...`,
      beforeRouteEnter (to, from, next) {
        // 在渲染该组件的对应路由被 confirm 前调用
        // 不!能!获取组件实例 `this`
        // 因为当守卫执行前,组件实例还没被创建
      }
    }

    beforeRouteUpdate

    当组件没有经历创建和销毁,仅仅是路由参数有更新的时候执行该函数

    比如我们路由是这样定义的:path:“user/:id",当id改变的时候,就是一种路由参数现象.beforeRouteUpdate会执行

    下面这个例子,我们点击di1和di2会导致keyword改变,就会触发beforeRouteUpdate

     <router-link tag="li" to="/search/fe" active-class="active">搜索di1</router-link>
     <router-link tag="li" to="/search/be" active-class="active">搜索di2</router-link>
     <router-view></router-view>
    const search = {
          template: `<div>search</div>`,
          beforeRouteUpdate(to, from, next) {
            console.log('beforeRouteUpdate:', to)
          }
    }
    
    var router = new VueRouter({
            {
              path: '/search/:keyword',
              component: search
            }
          ]
        })

    beoreRouteLeave

    导航离开该组件时调用的函数

  • 相关阅读:
    java 封装练习题3
    java 封装练习题2
    java 封装练习题1
    java 面向对象练习题6
    java 面向对象练习题5
    java 面向对象练习题4
    java 练习 计算5的阶乘 5!的结果是?
    java 练习 题目四:控制台输出九九乘法表
    java 练习 题目三:这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
    java 练习 题目二:我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的:5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/13068991.html
Copyright © 2020-2023  润新知