Я пытаюсь реализовать встроенные средства защиты навигации в 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? Я должен добавить, что я также не могу передать обратный вызов следующей функции для каждого маршрута и глобальным охранникам навигации по маршруту.
Большое спасибо заранее за любую помощь, очень признателен!