Как я могу активировать маршрут при навигации в модуле эффекта с помощью магазина роутера?

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

 return of(
        new routerActions.Go({
          path: ['./', payload.rootPath],
          extras: { relativeTo: this.route },
        }),
      );

 constructor(
    private actions$: Actions,
    private route: ActivatedRoute,
  ) {}

Я ввожу ActivatedRoute в свой конструктор модуля эффектов, который, кажется, здесь проблема. Как я могу получить активированный маршрут за пределами моего компонента и передать его действию навигации?


person JSON    schedule 07.09.2018    source источник


Ответы (2)


ActivatedRoute зависит от каждого маршрутизируемого компонента.

Это дает вам несколько вариантов.

  1. Переходит по корневому маршруту, чтобы вернуть нужные данные.

let route = this.router.routerState.root;
while (route.firstChild) {
route = route.firstChild;
}

return route.snapshot;

  1. Передайте ActivatedRoute от маршрутизируемого компонента в пакете.

  constructor(private store: Store<AppState>, private activatedRoute:ActivatedRoute) {}

  doSomething() {
    this.store.dispatch(new Action.YourAction({ id: actionId, route: activatedRoute });
  }
  
 

person Eric S    schedule 08.09.2018
comment
Я получаю сообщение об ошибке (я думаю, это связано с полезной нагрузкой только для чтения), когда я делаю это, версии ниже - person Brett; 15.04.2020
comment
вариант 1 не подходит, мне нужно активировать Route this.router.navigate ([_ 1_], {relativeTo: this.route, queryParams: {id}}); - person Brett; 15.04.2020

Передача activeRoute у меня не сработала. Вот что я сделал. Селектор selectRouterUrl выбирает текущий URL из состояния.

  navigateRelative$ = createEffect(() => this.actions$.pipe(
    ofType(navigateRelativeTo),
    withLatestFrom(this.store.select(selectRouterUrl)),
    tap(([{ commands }, url]) => this.router.navigate([url, ...commands])),
  ), { dispatch: false });
person Анастасия Куприянова    schedule 11.03.2021