Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2019, 14:52
Интересующийся
Отправить личное сообщение для kotelok Посмотреть профиль Найти все сообщения от kotelok
 
Регистрация: 27.08.2018
Сообщений: 22

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.
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2019, 15:09
Интересующийся
Отправить личное сообщение для kotelok Посмотреть профиль Найти все сообщения от kotelok
 
Регистрация: 27.08.2018
Сообщений: 22

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

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

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

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

Последний раз редактировалось kotelok, 29.03.2019 в 15:27.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск