обновить данные по активированному маршруту - перенаправить на него - PullRequest
1 голос
/ 01 апреля 2019

Я хотел бы обновить данные, снова направив их на тот же маршрутизатор.Angular не активирует функцию компонента ngOnInit, когда есть вторая (или более) маршрутизация к текущему активированному маршруту.Я хотел бы включить обновление данных на компоненте всякий раз, когда он маршрутизируется (даже если это уже активированный маршрут).Я знаю, что для этого есть несколько методов, но я бы хотел использовать метод RouterEvent и
NavigationEnd. Я знаю, что мне нужно установить onSameUrlNavigation в RouteModule.По какой-то причине я не могу достичь желаемого сценария.См. Мой код: это событие, которое сработало при нажатии на кнопку (дважды щелкнув по кнопке, необходимо дважды перейти к одному и тому же компоненту):

openMapTool(item: MapToolsItem)
{
   this.router.navigate([{ outlets: { <Name of router outlet>: ['SomePath', { param1: value1}] }}],);
  return false;
}

Это компонент (см. Ниже - «SomeComponent»)), который связан с путем «SomePath» - компонент, который должен быть маршрутизирован дважды:

 ngOnInit() {
this.subs.push(this.route.events.pipe(
  filter(e => e instanceof RouterEvent && e instanceof NavigationEnd),
).subscribe(e => 
  {
    this.doSomething(e.paramMap);
  }));

Это модуль, содержащий путь к «SomePath»:

const routes: Routes = [

{ path: 'SomePath', component: SomeComponent, outlet: 'SomeRouterOutlet'}];

@NgModule({
imports: [
RouterModule.forChild(routes),
RouterModule.forRoot(routes, {onSameUrlNavigation:'reload'})]}) 

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Вы можете попробовать подписаться на routePrams и принять соответствующие меры.

this.route.params.subscribe(params =>
  // Do something
});
0 голосов
/ 01 апреля 2019

Похоже, что ваши компоненты кэшируются, а затем используются повторно.Проверьте, определен ли RouteReuseStrategy в вашем app.module.ts.В этом случае вы должны программно удалить компонент из кэша класса RouteReuseStrategy.

app.module.ts

providers: [
    { provide: RouteReuseStrategy, useClass: <class name>}

Чтобы получить доступ к классу, определенному в app.module.ts, используйте Router.routeReuseStrategy

...