У меня есть защита входа в систему, которая в основном проверяет, вошел ли пользователь в систему. Если он вошел в систему, он пропускает вход в систему и переходит на домашнюю страницу. Я написал этот код, и это работает:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.store.select(fromApp.isAuthenticated)
.pipe(take(1),
map(isAuthenticated => {
if (isAuthenticated) {
this.router.navigate(['/home']);
return false;
} else {
return true;
}
})
)
}
Теперь, поскольку мне не нужно изменять или редактировать выходные данные (isAuthenticated boolean), я подумал: ну, почему бы не использовать оператор нажатия? Итак, я переписываю свой код:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.store.select(fromApp.isAuthenticated)
.pipe(take(1),
HERE------> tap(isAuthenticated => { <------ HERE
if (isAuthenticated) {
this.router.navigate(['/home']);
return false;
} else {
return true;
}
})
)
}
Затем я пошел в Chrome, и увидел черную страницу, и это было так:
В любом случае я вижу пустую страницу. Итак, я вошел в отладку и заметил, что он правильно переходит внутрь блока if / else ... так, почему tap () ломает приложение?