Angular 角度2-对父路由和子路由使用相同的解析器

Angular 角度2-对父路由和子路由使用相同的解析器,angular,angular2-routing,Angular,Angular2 Routing,我有一个Angular 2.0(稳定版)应用程序,其中一个实体是项目。对于每一个项目,我都将其详细信息分布在不同的路段/路线上: project/:id/概述 project/:id/文档 project/:id/logs 等 project的API在一次调用中返回大部分数据,因此我需要调用它一次,并使其可用于不同的子路由 我的路线如下: export const routing: ModuleWithProviders = RouterModule.forChild([ { pat

我有一个Angular 2.0(稳定版)应用程序,其中一个实体是
项目
。对于每一个
项目
,我都将其详细信息分布在不同的路段/路线上:

  • project/:id/概述
  • project/:id/文档
  • 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
代码,认为角度路由器可能也会传递路由数据,但没有成功

有什么想法吗


谢谢

您可以使用'route'的'parent'属性从父解析程序获取数据

ngOnInit() {
    this.route.parent.data.subscribe(data => {
        this.project = data.project;
    });
}

根据组件层次结构解析对象的距离,您可以通过
父属性
访问该对象

示例:

ngOnInit() {
    this.route.parent.data.subscribe(data => this.project = data.project);
}
或不订阅

附言。
请记住,如果您的组件比一个级别更深,您可以无限次地链接
父属性。像
这个.route.snapshot.parent.parent.data['project']
。干杯

在当前版本中也可以这样做:
this.route.parent.snapshot.data['mydata']
如果我想要同步访问?
ngOnInit() {
    this.project = this.route.snapshot.parent.data['project'];
}