Angular如何将数据传递到嵌套的路由组件

时间:2020-04-30 15:34:09

标签: angular angular-ui-router

我正在使用Angular Router,并且具有以下嵌套路由:

{
    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的情况下工作?我尝试在父子组件都共享的服务中订阅了一个可观察对象,但是传递给订阅子对象的函数未调用(可能是因为父对象在呈现子对象之前触发了可观察事件)。

如何正确将数据传递给子组件?

2 个答案:

答案 0 :(得分:0)

我会考虑使用其中带有Subject或BehaviourSubject作为属性的属性包服务。 我已经走过类似的道路,我所做的就是创建了一个带有一些属性的服务。 我将属性创建为BehaviourSubject,以便可以订阅它并在发生任何更改时得到通知。

答案 1 :(得分:0)

使用 ReplaySubject,这将在新订阅者第一次订阅时向他们重播任意数量的旧值。

使用 ReplaySubjectbufferSize1 将向新订阅者重播最后/当前值。就您而言,这应该足够了。