Доступ к общим данным в Vue Navigation Guard - PullRequest
0 голосов
/ 30 марта 2019

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

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

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

В моем проекте я храню его в одном файле с маршрутами.

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

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

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

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

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

Как правильно / оптимально реализовать идентичное поведение в Vue?

...