Angular как передать данные во вложенный компонент маршрута - PullRequest
1 голос
/ 30 апреля 2020

Я использую Angular Маршрутизатор и имею следующие вложенные маршруты:

{
    path: 'resource/:id',
    component: ResourceComponent,
    children: [
      {
        path: 'general',
        component: ResourceGeneralComponent
      },
      {
        path: 'background',
        component: ResourceBackgroundComponent
      }
    ]
}

ResourceComponent выбирает ресурс из REST-API и содержит <router-outlet>, в котором другой компоненты оказываются. Дочерние компоненты маршрута должны отображать различные разделы извлеченных данных. Я могу получить свои данные в дочерние компоненты, когда нажимаю на соответствующую ссылку, используя history.state. Это, однако, не работает при переходе к url/resource/1/general, потому что ResourceGeneralComponent не имеет необходимых данных от ResourceComponent.

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

<a routerLink="general" [state]="{resource: resource}" routerLinkActive="active" class="nav-link">General</a>

Как получить ресурс в дочерние компоненты, чтобы он работал без использования history.state? Я попытался подписаться на наблюдаемую в службе, которую совместно используют родительский и дочерний компоненты, но функция, переданная для подписки в child, не вызывается (возможно, потому, что parent запускает наблюдаемое событие до того, как child будет обработан).

Как правильно передать данные дочерним компонентам?

1 Ответ

0 голосов
/ 30 апреля 2020

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

...