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?
使用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)
自 Angular 5.2 以来,这个问题还有另一个答案
RouterModule.forRoot(routes, {
paramsInheritanceStrategy: 'always'
})
Run Code Online (Sandbox Code Playgroud)
您可以将设置传递到根 RouterModule 中,告诉它始终从其父级继承。恕我直言,这应该是默认值,但事实并非如此。这将允许所有参数从所有祖先继承。
不幸的是,没有简单的方法来访问父路由参数,并且没有计划更改它#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
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |