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