Как приостановить изменение маршрута в событии маршрутизатора navigationStart

В моем приложении у меня есть маршруты, открытые из пакетов (узловых модулей). Поэтому я не мог использовать canActivate или canDeactivate для маршрутов, определенных внутри узловых модулей.

Поэтому я начал подписываться на все изменения маршрута в моем компоненте приложения и в зависимости от условия перенаправляю пользователя на разные маршруты.

Поскольку условие имеет вызов API, изменение маршрута не приостанавливается в navigationStart, а завершает маршрутизацию на другую страницу, и после успешного вызова API происходит перенаправление на другой маршрут.

Как я могу справиться с этим? Есть ли способ приостановить изменение маршрута в navigationStart и включить маршрут после вызова API или есть ли другой способ определить canActivate для всех маршрутов, включая маршруты из узловых модулей.


person Keshav1007    schedule 24.08.2018    source источник
comment
Я столкнулся с той же проблемой, и я просто пытаюсь найти обходной путь.   -  person Twois    schedule 11.10.2018
comment
На самом деле я уверен, что canActivate не будет работать, потому что охранники вызываются после RoutesRecognized, ведь это означает, что если у вас нет маршрута для этого, он будет перенаправлять на резервный URL-адрес, а затем будут вызываться только резервные охранники.   -  person Twois    schedule 11.10.2018


Ответы (1)


Да, с помощью распознавателя вы можете добиться этого,

  1. Сначала вам нужно создать службу распознавателя, которая будет реализовывать интерфейс «Разрешить».

  2. Внутри функции разрешения сделайте вызов API.

  3. И добавьте службу внутри объявлений маршрута, как это => разрешить: {данные: ResolveService}

  4. Таким образом, пока вызов API не будет выполнен и он не вернет данные, он не запустит navigationStart. Пожалуйста, ознакомьтесь с этой статьей https://codeburst.io/understanding-resolvers-in-angular-736e9db71267

person Sumit Vekariya    schedule 11.10.2018
comment
Как вы добавите разрешение для маршрутов, определенных внутри некоторого открытого пакета?? поскольку мы не можем изменить пакеты, мы не сможем добавить это разрешение в объявление маршрута. Есть ли способ добавить разрешение для всех маршрутов, подписавшись - person Keshav1007; 12.10.2018
comment
Я думаю, большая проблема в том, что резолверы принадлежат маршрутам, но если пользователь попытается получить несуществующую страницу, ангульра найдет резервный URL-адрес, и мы понятия не имеем о URL-адресе, который использовал пользователь (но, к сожалению, необходимо разрешить правильный компонент). - person Twois; 12.10.2018
comment
@ Keshav1007, вы автор этого пакета npm? В этом случае вы можете создать преобразователь и использовать их. - person Twois; 12.10.2018