@ ngrx-router изменил маршрут до того, как canDeactivate сработал - PullRequest
0 голосов
/ 05 марта 2019

Я столкнулся с проблемой, что, когда я хочу использовать 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)

...