NGRX - Как я могу получить доступ к своему состоянию приложения в угловой защите? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть защита маршрута (canActivate), и мне нужно получить доступ к текущему состоянию моего приложения, чтобы проверить данные, чтобы предотвратить неправильную навигацию пользователей. Как я могу получить текущее состояние?

Я только что попытался получить состояние, используя подписку в магазине, но он не получает данные, пока состояние не изменилось!

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете сделать это так. Поскольку canActivate ожидает, что вы вернете логическое значение, вам необходимо сопоставить данные вашего магазина с логическим значением

import { of } from 'rxjs';
import { switchMap } from "rxjs/operators";

@Injectable()
export class SomeGuard implements CanActivate {
    constructor(private store: Store<AppState>) {}

    loadData(): Observable<any> {
        return this.store.select(state => state.someState);
    }

    canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
        return this.loadData()
            .pipe(switchMap(() => {
                return of(true);
            }));
        }
    }
}
...