Vue Router с vue-class-component: следующая функция не принимает опцию обратного вызова

Я пытаюсь реализовать встроенные средства защиты навигации Vue Router с помощью пакета vue-property-decorator. В основе vue-property-decorator лежит пакет vue-class-component. Он предлагает registerHooks метод, позволяющий вам объявить, какие методы следует рассматривать как хуки жизненного цикла (вместо методов экземпляра).

Следующий код работает, в результате чего появляется предупреждение при входе в маршрут:

import { Component, Vue } from 'vue-property-decorator';
import { router } from './Router';

@Component({
    template: '<div></div>'
})
export class Foo extends Vue {

    beforeRouteEnter(to, from, next){
        alert('Entering Foo');
        next();
    }
}

router.addRoutes([
    { path: '/foo', component: Foo }
]);

Файл Router.ts содержит регистрацию перехвата в соответствии с документами и точно:

import VueRouter from 'vue-router';
import { Component } from 'vue-property-decorator'

Component.registerHooks([
  'beforeRouteEnter',
  'beforeRouteUpdate',
  'beforeRouteLeave'
]);

export const router = new VueRouter({
  mode: 'abstract'
});

Файл маршрутизатора импортируется в файл App.ts перед импортом компонентов, поэтому хуки регистрируются до того, как компоненты.

Тем не менее, я не могу передать обратный вызов next метод. Учитывая обновленный Foo компонент сверху:

import { Component, Vue } from 'vue-property-decorator';
import { router } from './Router';

@Component({
    template: '<div></div>'
})
export class Foo extends Vue {

    beforeRouteEnter(to, from, next){
        next(vm => {
            alert('Entering Foo');
        });
    }
}

Предупреждение никогда не срабатывает. Я что-то упустил, или это ошибка в пакете vue-class-component? Я должен добавить, что я также не могу передать обратный вызов следующей функции для каждого маршрута и глобальным охранникам навигации по маршруту.

Заранее большое спасибо за любую помощь, очень признателен!

0 ответов

Переместите хук beforeRouteEnter в @Component декоратор

@Component({
    template: '<div></div>',
    beforeRouteEnter(to, from, next){
        next(vm => {
            alert('Entering Foo');
        });
    }
})

Другие вопросы по тегам