Angular 2如何将变量从父组件传递到路由器出口

Jos*_*gis 8 router components angular

我发现的所有教程和答案都只显示了如何使用输入将变量从父组件传递给子组件,但是这个子组件包含在路由器出口中而不是直接在父模板中?

例如:

主要成分

@Component({
  selector: 'my-app',
  template: `
          Main page
          <router-outlet></router-outlet>
              `,
  directives: [ROUTER_DIRECTIVES]
})

@RouteConfig([
    { path: '/contact', name: 'Contact', component: ContactComponent},
 ])

export class AppComponent{
  public num:Number = 123;
}





@Component({
   selector: 'contact-page',
   template: 'contact page'
})
export class ContactComponent{
   public num:Number;
}
Run Code Online (Sandbox Code Playgroud)

因此,在此示例中,主组件模板包含一个路由器出口,其中将呈现子联系人组件,但如何在父组件组件的路由器出口内评估的子组件中获取变量"num"值?

Gün*_*uer 0

目前您无法绑定到路由器添加的组件。使用共享服务(这里已经有大量关于 SO 的示例)来从添加的组件传递数据或向添加的组件传递数据或订阅事件。

另请参阅此问题https://github.com/angular/angular/issues/4452尤其是此评论https://github.com/angular/angular/issues/4452#issuecomment-153889558

  • 我猜你只是想多了。目前,绑定不适用于动态添加的组件(通过路由器或 DynamicComponentLoader)。您使用服务而不是绑定。这并没有多大区别,只是它更多的是样板(创建服务类、添加字段和事件发射器或主题、将服务添加到提供者、读取、写入、订阅父级和子级的输入/输出)。但除此之外,唯一的区别是孙子也可以访问该服务,而 Binding 仅适用于直接子代。 (2认同)