Angular2 Изучение разрешенных данных в canActivate Guard?

Можно ли получить доступ к разрешенным данным маршрута (-Resolver) внутри сторожа canActivate. В настоящее время я могу получить доступ к разрешенным данным в компоненте с помощью

ngOnInit() {
    this.route.data
        .subscribe((data: { example: Array<Object> }) => {
            this.example = data.example;
            console.log('example resolver', this.example);
        });
}

Как я мог управлять этим в охраннике canActivate? Это не работает:

constructor(private route: ActivatedRoute) {}

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

    this.route.data
        .subscribe((data: { example: Array<Object> }) => {
            this.example = data.example;
            console.log('example resolver', this.example);
        });
}

person Max Solid    schedule 07.03.2017    source источник
comment
Я ожидаю, что data станет доступным только после того, как canActivate вернет true   -  person Günter Zöchbauer    schedule 07.03.2017
comment
нет... настройка маршрутов data.example вручную делает его доступным в canActivate с помощью this.route.data['example']... проблема, похоже, в том, что canActivate запускается до того, как данные будут разрешены resolver, а опубликованная подписка не работает   -  person Max Solid    schedule 07.03.2017
comment
Вы можете переместить логику защиты в разрешение. Но, конечно, это гораздо менее элегантное решение. Насколько я понимаю, все разрешения необязательны. Вы можете заблокировать навигацию, отказавшись от решения   -  person Aluan Haddad    schedule 07.03.2017
comment
У меня та же проблема, у меня есть authGuard, который берет список разрешенных ролей из data: part (работает нормально), но я пытаюсь разрешить назначенные пользователям роли для проверки в authGuard по разрешенным ролям - часть данных (список разрешенных roles) работает нормально, однако я не могу получить доступ к разрешенным ролям — кажется, что resolve даже не вызывается!   -  person Luke Baughan    schedule 21.04.2017


Ответы (1)


Нет, вы не можете, потому что метод canActivate вызывается перед разрешением, поэтому вы не можете получить данные

Защитная обработка:

  1. canDeactivate

  2. canLoad

  3. canActivateChild

  4. canActivate

  5. разрешить

person G.Vitelli    schedule 09.07.2018