@ ngrx-router在canDeactivate工作之前更改了路由

时间:2019-03-05 10:52:11

标签: angular typescript router ngrx ngrx-router-store

我遇到一个问题,当我想使用来自警卫队的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)

0 个答案:

没有答案