CanLoad, Ленивые модули и принять (1) - PullRequest
0 голосов
/ 04 декабря 2018

Я защищаю ленивый модуль с помощью Guard, используя CanLoad.

Я восстанавливаю состояние моего хранилища ngrx и проверяю, прошел ли пользователь аутентификацию.

Вот мойкод в моем auth-guard.service.ts:

canLoad() {
    return this.store.pipe(
        select('auth'),
        take(1),
        map(
            (authState: fromAuth.State) => {
                if (authState.authenticated) {
                    return true;
                } else {
                    this.router.navigate(['/auth/signin']);
                    return false;
                }
            }
        ))
}

Этот код в порядке.Все работает как ожидалось.

Но вопрос в том ... Почему мне нужно использовать take (1), чтобы это работало?Если я уберу дубль (1), этот охранник не будет работать должным образом.

1 Ответ

0 голосов
/ 04 декабря 2018

Это будет работать только с take (1), потому что без наблюдаемого не завершится в это время, и canLoad ждет, пока наблюдаемое завершится.

См. http://reactivex.io/documentation/operators/take.html дубль построит новый наблюдаемый дубль x предметов из своего источника, а после этого завершит и проигнорирует другие предметы.

...