TypeScripy + Vue Property Decorator + Vue Router,组件内的导航守卫无效

组件内守卫

  1. beforeRouteEnter
  2. beforeRouteUpdate (2.2 新增)
  3. beforeRouteLeave
  4. 官网链接

注意事项

  • 直接在class中定义这3个钩子函数无效,函数不会触发

  • 需要先registerHooks,如下

  • 方式一(直接在组件中register)
<template>
    <h1>直接在class中定义这3个钩子函数无效不会触发,需要先`registerHooks`</h1>
</template>

<script lang='ts'>
    import { Component, Vue } from "vue-property-decorator";

    @Component({
        beforeRouteEnter(to, from, next) {
            // 在渲染该组件的对应路由被 confirm 前调用
            // 不!能!获取组件实例 `this`
            // 因为当守卫执行前,组件实例还没被创建
            console.log("路由进来了");
            next();
        },
        beforeRouteUpdate(to, from, next) {
            // 在当前路由改变,但是该组件被复用时调用
            // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
            // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
            // 可以访问组件实例 `this`
            console.log("路由更新了");
            next();
        },

        beforeRouteLeave(to, from, next) {
            // 导航离开该组件的对应路由时调用
            // 可以访问组件实例 `this`
            console.log("路由离开了");
            next();
        }
    })
    export default class Chat extends Vue {
        
    }
</script>
  • 方式二(在全局register,注册后就可以在class中正常使用)
import { Component } from "vue-property-decorator";

Component.registerHooks(["beforeRouteEnter", "beforeRouteLeave", "beforeRouteUpdate"]);
posted @ 2020-01-14 21:42  _Jarrett  阅读(2008)  评论(0编辑  收藏  举报