将路线参数从父路线传递到子路线

时间:2017-02-15 18:24:18

标签: angular angular2-routing

我的路线结构如下:

parent/:id
    |
    child
    |
    child

我可以通过以下方式从父组件中获取参数:

ngOnInit() {
  this.route.params.subscribe((params) => {
      this.id = +params['id'];
  });
}

然后以某种方式将其作为<router-output>的输入附加?或者我是否必须像对待父母那样从每个孩子那里提取价值?

id param从父组件传递到所有子组件的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

使用Angular路由器5(谁知道2?),你不会走远;有一个父对象也是ActivatedRoute。

在儿童路线中,你可以这样:

ngOnInit() {
  this.route.parent.params.subscribe(params => {
    this.parentRouteId = +params["id"];
    console.log(this.parentRouteId);
  });
}

你的路线必须这样定义:

const routes: Routes = [
  {
    path: ':id',
    component: MyComponent,
    children: [
      { path: '', redirectTo: '/my-page' },
      { path: 'my-page', redirectTo: component: MyChildComponent }
    ]
  },
];

答案 1 :(得分:2)

不幸的是,没有简单的方法来访问父路由参数,并且没有计划更改它#12767,所以唯一的方法是使用service或localStorage解决方法,无论你喜欢什么。

   class Service {
        public params:Subject<any> = new Subject<any>();

        public next(params):void { this.params.next(params); }
   }

   class Parent {
        constructor(service:Service, route:ActivatedRoute){
             activatedRoute.params.subscribe(params => service.next(params));
        }
   }

   class Child {
        constructor(service:Service){
             service.params.subscribe(params => console.log(params));
        }
   }

以下是组件可以相互通信的一些方法: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service

答案 2 :(得分:2)

从 angular 5.2 开始,这个问题有了另一个答案

RouterModule.forRoot(routes, {
    paramsInheritanceStrategy: 'always'
})

您可以将设置传递到您的根 RouterModule 中,以告诉它始终从其父项继承。恕我直言,这应该是默认值,但事实并非如此。这将允许从所有祖先继承所有参数。