Angular 路由器 - 子路由的空数据对象

Angular router - empty data object for child routes

我的 angular 路由器需要为父路由和子路由使用相同的组件,但传递数据以区分父路由和子路由。

当前问题:子路由没有从子路由注册任何数据。

定义关系的路由模块段:

{
        path: 'parent-path/:id',
        component: MyComponent,
        children: [{
          path: 'child-path'
          component: MyComponent,
          data: {MY_DATA_KEY: MY_DATA_VALUE},
        }]
},

在angular组件中:

constructor(
      //...
      private readonly activatedRoute: ActivatedRoute,
      //...
) {}

ngOnInit() {
   this.activatedRoute.data.subscribe(data => {
      console.log('data', data);  // This prints and empty object //

      /* ... do something with data */
   });
}

当前行为:

到达路线'.../parent-path/some-id'

命中路线'.../parent-path/some-id/child-path'

注意:我还尝试在父级别添加数据,这确实在两条路线上都注册了。 Angluar 相对较新,因此我们将不胜感激。提前致谢!

angular的路由本质上是一个有父子的树结构,数据定义在树的节点上,数据对象存在于定义它们的特定节点上。所以父路由不会在它自己的 'data' 中看到子路由数据,子路由也不会直接看到它的父 'data'。但是您可以根据需要从激活的路由访问父/子路由

this.route.parent.data.subscribe(pd => console.log(pd, 'parent data'));

this.route.children.forEach(c => c.data.subscribe(cd => console.log(cd, 'child data'));

这里是一个演示行为的 stackblitz:https://stackblitz.com/edit/angular-s4mffg?file=src/app/app.module.ts