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

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

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

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

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

Я столкнулся с той же проблемой, и я просто пытаюсь найти решение.

Twois 11.10.2018 15:15

На самом деле я уверен, что canActivate не будет работать, потому что охранники вызываются после RoutesRecognized, ведьма означает, что если у вас нет маршрута для этого, он будет перенаправлен на резервный URL-адрес, и тогда будут вызываться только резервные охранники

Twois 11.10.2018 15:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
2 447
1

Ответы 1

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

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

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

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

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

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

Keshav1007 12.10.2018 08:27

Я думаю, что более серьезная проблема заключается в том, что преобразователи принадлежат маршрутам, но если пользователь попытается получить несуществующую страницу, angulra найдет резервный URL-адрес, и мы не знаем, какой URL-адрес используется пользователем (но, к сожалению, это нужно разрешить правильный компонент).

Twois 12.10.2018 11:05

@ Keshav1007 вы автор этого пакета npm? В этом случае вы можете создать преобразователь и использовать его.

Twois 12.10.2018 11:07

Другие вопросы по теме