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

时间:2016-09-28 09:43:32

标签: angular angular2-routing

我有一个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也可能会传递路由数据,但没有成功。

有什么想法吗?

由于

2 个答案:

答案 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一样。干杯!