从父路径到子路径传递路径参数

Jam*_*dla 4 angular2-routing angular

我的路线结构如下:

parent/:id
    |
    child
    |
    child
Run Code Online (Sandbox Code Playgroud)

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

ngOnInit() {
  this.route.params.subscribe((params) => {
      this.id = +params['id'];
  });
}
Run Code Online (Sandbox Code Playgroud)

然后<router-output>以某种方式将其作为输入?还是我必须像处理父母一样从每个孩子那里提取价值?

将参数从父组件传递到所有子组件的最佳方法是什么id

Vin*_*com 6

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

在子路径中,您可以这样获得:

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

并且您的路线必须定义如下:

const routes: Routes = [
  {
    path: ':id',
    component: MyComponent,
    children: [
      { path: '', redirectTo: '/my-page' },
      { path: 'my-page', redirectTo: component: MyChildComponent }
    ]
  },
];
Run Code Online (Sandbox Code Playgroud)


bgr*_*ham 6

自 Angular 5.2 以来,这个问题还有另一个答案

RouterModule.forRoot(routes, {
    paramsInheritanceStrategy: 'always'
})
Run Code Online (Sandbox Code Playgroud)

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


kem*_*sky 3

不幸的是,没有简单的方法来访问父路由参数,并且没有计划更改它#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));
        }
   }
Run Code Online (Sandbox Code Playgroud)

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