我遇到一个问题,当我想使用来自警卫队的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上发现了一个重复我问题的问题。
问题:https://github.com/ngrx/platform/issues/816
转载的问题:https://stackblitz.com/edit/angular-fa311h(角度5)