美文网首页
vue2.x导航卫士之beforeRouteEnter/befo

vue2.x导航卫士之beforeRouteEnter/befo

作者: 第八共同体 | 来源:发表于2017-11-18 11:28 被阅读0次

    引:vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。
    全局的是在router对象上定义的守卫,比如:

    const router = new VueRouter({ ... })
    
    router.beforeEach((to, from, next) => {
      // ...
    })
    

    注意一定别忘了调用next()才能正常解析。
    单个路由独享的,就是在针对个别路由定义的守卫,比如:

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

    这些守卫与全局前置守卫的方法参数是一样的。
    最后,详细介绍一下组件内守卫,因为这个不是那么直观地可以被理解,比如

    <template>
      <div>
        <ol>
          <li v-for="arg in $route.params">我是: {{arg}}</li>
        </ol>
        <br/>
        <div v-show="paradis">我的属性有: {{$route.params}}</div>
      </div>
    </template>
    
    <script type="text/ecmascript-6">
    export default {
      data () {
        return {
          paradis: false
        }
      },
      beforeRouteEnter (to, from, next) {
        // 在渲染该组件的对应路由被 confirm 前调用
        // 不!能!获取组件实例 `this`
        // 因为当守卫执行前,组件实例还没被创建
        console.log(to)
        console.log(from)
        console.log(next)
        next(vm => {
          console.log(vm)
        })
      },
      methods: {
        paraShow () {
          this.paradis = true
        }
      }
    }
    </script>
    
    <style lang="stylus" rel="stylesheet/stylus">
    
    </style>
    

    beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。所以在next()中定义了一个回掉,我们就可以访问组件内的属性方法了。
    至于,后面两个守卫

    beforeRouteUpdate (to, from, next) {
        // 在当前路由改变,但是该组件被复用时调用
        // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
        // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
        // 可以访问组件实例 `this`
        // 别忘了调用next
      },
      beforeRouteLeave (to, from, next) {
        // 导航离开该组件的对应路由时调用
        // 可以访问组件实例 `this`
      }
    

    上面的注释说的非常清晰,调用方法和beforRouteEnter是一样的

    相关文章

      网友评论

          本文标题:vue2.x导航卫士之beforeRouteEnter/befo

          本文链接:https://www.haomeiwen.com/subject/birevxtx.html