我有一个Angular 2.0(稳定版)应用,其中一个实体是project
。对于这些projects
中的每一个,我的细节分布在不同的部分/路线上:
project/:id/overview
project/:id/documents
project/:id/logs
project
的API会在一次调用中返回大部分数据,因此我需要调用一次,并使其可用于不同的子路由。
我的路线如下:
export const routing: ModuleWithProviders = RouterModule.forChild([
{ path: 'projects', component: ProjectsComponent },
{ path: 'project/new', component: NewProjectComponent },
{
path: 'project/:id',
component: ProjectDetailComponent,
resolve: {
project: ProjectDetailResolve
},
children: [
{ path: '', redirectTo: 'overview', pathMatch: 'full' },
{ path: 'overview', component: ProjectOverviewComponent },
{ path: 'documents', component: DocumentsComponent },
{ path: 'logs', component: LogsComponent },
]
}
]);
ProjectDetailComponent
目前通过使用解析器(没有问题)成功获取项目数据:
ngOnInit() {
this.route.data.forEach((data: { project: any }) => {
this.project = data.project;
});
}
但是我需要将同一个项目传递给子路由,因为对每个路由触发另一个API调用是没有意义的。
我尝试在子组件中使用相同的ngOnInit
代码,认为Angular Router也可能会传递路由数据,但没有成功。
有什么想法吗?
由于
答案 0 :(得分:18)
您可以使用' parent' ' route'的财产从父解析器获取数据。
ngOnInit() {
this.route.parent.data.subscribe(data => {
this.project = data.project;
});
}
答案 1 :(得分:4)
取决于contains(Object)
属性可以通过组件层次结构确定解析对象的距离。
<强>示例:强>
parent
或没有订阅
ngOnInit() {
this.route.parent.data.subscribe(data => this.project = data.project);
}
P.S。
请记住,如果您的组件比一个级别更深,您可以无限次地链接ngOnInit() {
this.project = this.route.snapshot.parent.data['project'];
}
属性。像parent
一样。干杯!