Я столкнулся с проблемой, что, когда я хочу использовать canDeactivate()
из компонента защиты, чтобы не покидать текущее состояние маршрута, @ngrx/router
изменяет состояние, прежде чем моя охрана возвращает отрицательный ответ.
Я использую Angular 6 (подробнее о версии пакетов ниже).Я уже видел, что в 7-й версии эта проблема была исправлена, но в настоящее время я не могу перейти на нее.Что касается решения этой проблемы, я использую заглушку, чтобы вернуться на страницу, если переход в следующее состояние был запрещен.Выглядит это так:
example.guard.ts
canDeactivate(
component: ExampleComponent, route: ActivatedRouteSnapshot, state: RouterStateSnapshot
): boolean | Observable<boolean> {
if (!component.readyToGo()) {
return this.moveBackward(state.url);
}
return true;
}
private moveBackward(url: string) {
this.router.navigate([url]);
return false;
}
Но я думаю, что существует более подходящее решение для решения этой проблемы.Например, может быть, я могу поймать действие маршрутизатора, которое было отменено.Может быть, кто-то сталкивался с этим раньше или мог бы помочь мне советом?
package.json
"dependencies": {
"@angular/animations": "6.1.9",
"@angular/common": "6.1.9",
"@angular/compiler": "6.1.9",
"@angular/core": "6.1.9",
"@angular/forms": "6.1.9",
"@angular/http": "6.1.9",
"@angular/platform-browser": "6.1.9",
"@angular/platform-browser-dynamic": "6.1.9",
"@angular/router": "6.1.9",
"@ngrx/effects": "^6.1.0",
"@ngrx/entity": "^6.1.0",
"@ngrx/router-store": "^6.1.0",
"@ngrx/store": "^6.1.0",
"@ngrx/store-devtools": "^6.1.0",
"rxjs": "^6.3.3",
"zone.js": "~0.8.26"
},
ОБНОВЛЕНИЕ: Я обнаружил проблему наgithub, который повторяет мою проблему.
Issue : https://github.com/ngrx/platform/issues/816
Воспроизведенная проблема : https://stackblitz.com/edit/angular-fa311h (Angular 5)