Угловое слияние данных родительского маршрута с текущим маршрутом - PullRequest
0 голосов
/ 26 апреля 2019

Мне бы хотелось иметь простой способ получить доступ ко всем данным о маршрутах родителей на текущем дочернем маршруте, похоже, что это будет обычная задача, если я пропущу что-то встроенное в angular?

Пример

const routes: Routes = [
  {
    path: '',
    component: WrapperComponent,
    data: {
      prop1: 'abc',
    },
    children: [
      {
        path: '',
        component: HomeComponent,
        data: {
          prop2: '1',
          prop3: 'Some other data',
        },
      },
      {
        path: 'welcome',
        data: {
          prop1: 'efg',
          prop2: 'my cool prop',
        },
      },
];

Моей целью было бы какое-то свойство активированного маршрута, которое возвращает объединенные данные маршрута, поэтому если по адресу:

/ - данные маршрута будут

{
   prop1: 'abc',
   prop2: '1',
   prop3: 'Some other data',
}

/ welcome - данные маршрута будут

{
   prop1: 'efg',
   prop2: 'my cool prop',
}

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

this.router.events  // private router: Router,
  .pipe(
    filter((event) => event instanceof NavigationEnd),
    map(() => this.activatedRoute),
    map((route) => {
      let data: any = {};
      while (route.firstChild) {
        data = { ...data, ...route.firstChild.snapshot.data };
        route = route.firstChild;
      }
      return data;
    }),
  ).subscribe((e) => console.log(e));

эта функциональность уже существует в угловых?

1 Ответ

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

Я думаю, что это можно сделать с помощью paramsInheritanceStrategy: 'always', когда вы установите RouterModule:

@NgModule({
  imports: [
    RouterModule.forRoot(routes, { paramsInheritanceStrategy: 'always' })
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...