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

组件内守卫

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

    注意事项

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

  • 需要先registerHooks,如下

    <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>

猜你喜欢

转载自www.cnblogs.com/guojbing/p/12194239.html