Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   CanDeactivate: nextState (https://javascript.ru/forum/angular/77140-candeactivate-nextstate.html)

kotelok 29.03.2019 14:52

CanDeactivate: nextState
 
Есть компонент.

Для компонента реализован и зарегистрирован гуард "CanDeactivate".

В реализации которого имеется метод:
canDeactivate(component: IComponentDeactivate, currentRoute: ActivatedRouteSnapshot,
        nextState?: RouterStateSnapshot): Observable<boolean> {

В самом компоненте есть код навигации на следующую страницу:
this.router.navigate(['../' + this.nextUrl], { relativeTo: this.route });

Код навигации отрабатывает корректно. Т.е. браузер переходит на указанный урл, корректно обновляет адресную строку, отрисовывает страницу, подгрузив для неё компонент.

Метод 'canDeactivate' тоже вызывается. Однако, в его входных параметрах 'currentRoute' и 'nextState' содержится один и тот же адрес - адрес той страницы с которой происходит навигация.

Я предполагал, что 'nextState' будет содержать адрес страницы НА которую производится навигация, а тут такая незадача.

Есть ли какая-то возможность определить цель перехода внутри 'canDeactivate'? На этом строится часть логики.

P.S.: Angular 7.3.6.

kotelok 29.03.2019 15:09

Вопрос закрыт.

После перехода c 6-й на 7-ю версию Ангуляра, в интерфейсе 'CanDeactivate' изменилась сигнатура метода:
canDeactivate(
component: T, 
currentRoute: ActivatedRouteSnapshot, 
currentState: RouterStateSnapshot, 
nextState?: RouterStateSnapshot):

Раньше 'currentState' не было и на его месте (третьим параметром) был 'nextState'.

Зачем они вообще добавляют новые параметры в ЦЕНТР. Это ж очевидно вызовет сложнодиагностируемые проблемы с миграцией на следующую версию.


Часовой пояс GMT +3, время: 04:06.