Подписка Angular ActivatedRoute params в родительском компоненте запускается только один раз - PullRequest
0 голосов
/ 04 октября 2019

У меня есть контейнерный компонент AdminComponent с различными дочерними элементами:

{
    path: ":company/admin",
    component: AdminComponent,
    children: [
      { path: "", component: LoginComponent },
      { path: "account", component: AccountComponent, canActivate: [RedirectGuard] },
      { path: "detail", component: AdminlayoutsComponent, canActivate: [RedirectGuard] }
    ]
}

Но моя подписка на маршрут запускается только один раз, а не при изменении маршрута:

export class AdminComponent {

  constructor(  private activatedRoute: ActivatedRoute ) {
    this.activatedRoute.params.subscribe((params: Params) => {
      console.log("####params", params);
  });
}
}

Как можноЯ запускаю событие изменения маршрута при каждом изменении маршрута в родительском компоненте?

Ответы [ 2 ]

0 голосов
/ 04 октября 2019
События

не запускаются, потому что: в path: ":company/admin", только первая часть пути является параметром. Правильный слушатель событий:

  router.events.subscribe((val) => { 
// do stuff
)};
0 голосов
/ 04 октября 2019

В Angular у каждого маршрута есть свой экземпляр.

Это означает, что если вы хотите слушать параметры ребенка, вы должны слушать ребенка маршрута, по которому вы идете.

Вот демонстрация , показывающая это.

  constructor(private route: ActivatedRoute) {
    route.children[0].params.subscribe(params => { console.log(params); });
  }

Хотя я должен предупредить вас, это не очень хорошая практика, потому что родитель не всегда знает, есть ли там ребенок (хотя обратное неверно). Вы должны просто слушать события маршрутизации в дочернем компоненте.

...