В моем приложении есть маршруты из пакетов (узловых модулей). Поэтому я не мог использовать canActivate или canDeactivate для маршрутов, определенных внутри узловых модулей.
Итак, я начал подписываться на все изменения маршрута в моем компоненте приложения и в зависимости от условия перенаправляю пользователя на разные маршруты.
Поскольку условие имеет вызов API, изменение маршрута не приостанавливается в navigationStart, вместо этого оно завершает маршрутизацию на другую страницу, и после успешного вызова API перенаправление происходит на другой маршрут.
Как я могу с этим справиться? Есть ли способ приостановить изменение маршрута в navigationStart и включить маршрут после вызова API, или есть какой-либо другой способ определить canActivate для всех маршрутов, включая маршруты из узловых модулей.
На самом деле я уверен, что canActivate не будет работать, потому что охранники вызываются после RoutesRecognized, ведьма означает, что если у вас нет маршрута для этого, он будет перенаправлен на резервный URL-адрес, и тогда будут вызываться только резервные охранники
Да, с помощью резольвера вы можете добиться этого,
Сначала вам нужно создать службу распознавателя, которая будет реализовывать интерфейс «Разрешить».
Внутри функции разрешения сделайте вызов API.
И добавьте сервис внутри объявлений маршрута, например, так => решить: {data: ResolveService}
Итак, пока вызов API не будет выполнен и он не вернет данные, он не запустит navigationStart. Пожалуйста, прочтите эту статью https://codeburst.io/understanding-resolvers-in-angular-736e9db71267
Как вы добавите разрешение для маршрутов, определенных внутри некоторого пакета, который выставлен? поскольку мы не можем изменить пакеты, мы не сможем добавить это разрешение в объявление маршрута. Есть ли способ добавить разрешение для всех маршрутов, подписавшись
Я думаю, что более серьезная проблема заключается в том, что преобразователи принадлежат маршрутам, но если пользователь попытается получить несуществующую страницу, angulra найдет резервный URL-адрес, и мы не знаем, какой URL-адрес используется пользователем (но, к сожалению, это нужно разрешить правильный компонент).
@ Keshav1007 вы автор этого пакета npm? В этом случае вы можете создать преобразователь и использовать его.
Я столкнулся с той же проблемой, и я просто пытаюсь найти решение.