Доступ к общим данным в Vue Navigation Guard

#javascript #typescript #vue.js #vue-router

#javascript #машинописный текст #vue.js #vue-маршрутизатор #typescript

Вопрос:

В Angular мы определяем Route Guard как класс typescript, в который мы можем внедрить общий сервис

 @Injectable()
export class AppRouteGuard implements CanActivate, CanActivateChild {

    constructor(
        private _router: Router,
        private _sessionService: SessionService,
    ) { }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {

        if (!this._sessionService.user) {
            this._router.navigate(['/account/login']);
            ...
  

В Vue Navigation Guard обычно представляет собой функцию, определенную следующим образом

 function guard(to, from, next) { ... }
  

В моем проекте я храню его в том же файле, что и маршруты.

Я не уверен, как зарегистрировать единственный экземпляр общей службы Vue, хранящей данные, связанные с пользователем, после завершения входа в систему.

Что мне нужно, так это разрешить общий сервис на уровне Navigation Guard и выполнить проверку, не является ли пользователь null (что означает, что они вошли в систему).

Это стало действительно сложно, я погуглил эту дилемму и нашел рекомендации по привязке сервиса к Vue.prototype например

 Vue.prototype.$sharedService = new SharedService();
  

Но тогда я не могу разрешить экземпляр на уровне Navigation Guard.

Каков правильный / оптимальный способ реализации идентичного поведения в Vue?

Комментарии:

1. вы можете сохранить свои данные в состоянии хранилища vuex после входа в систему, а в navigation guard использовать хранилище, чтобы увидеть, присутствуют ли данные или нет, я думаю, что это правильный способ, и именно так мы это делаем.

2. @MohsinAmjad вау, я почти потерял всякую надежду на получение обратной связи. большое спасибо, что указали на vuex.