Angular ActivatedRoute数据返回一个空对象

Fra*_*rzi 39 typescript angular-routing angular

我有一条注册了一些数据的路线:

const routes: Routes = 
[
    {path: 'my-route', data: { title: 'MyTitle' }, component: MyComponent},
];
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下方法访问路线的数据ActivatedRoute:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({...})
export class MyComponent implements OnInit {
  private routeData;

  constructor(private route: ActivatedRoute) {}

  ngOnInit() {
    this.routeData = this.route.data.subscribe((data) => {
      console.log(data); // this is returning an empty object {}
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,这data是一个空洞的对象.

如何解决这个问题呢?

Fra*_*rzi 62

编辑:问题是我试图从外面的组件访问ActivatedRoute <router-outlet>.所以看起来这是预期的行为.

但是我仍然认为我的答案对任何想要完成同样事情的人都有用.


我在GitHub(感谢manklu)上找到了一个解决方法,我用它来完成我需要的工作:

import { Component, OnInit } from '@angular/core';
import { Router, RoutesRecognized } from '@angular/router';

@Component({...})
export class MyComponent implements OnInit {
  private routeData;

  constructor(private router: Router) { }

  ngOnInit() {
    this.router.events.subscribe((data) => {
      if (data instanceof RoutesRecognized) {
        this.routeData = data.state.root.firstChild.data;
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

这样做this.routeData会保存我需要的路径数据(在我的例子中是页面title).

  • 感谢您提供此解释。我只是通过 app.component.html 调用特定组件 - 而不是 `&lt;router-outlet&gt;&lt;/router-outlet&gt;`。干杯! (2认同)
  • 如果要获取url参数而不是自己的数据,请使用以下命令:`this.router.events.subscribe(val =&gt; {if(val RoutesRecognized){var strId = val.state.root.firstChild.params [“ id “];}});` (2认同)
  • 这解决了我的问题......我的意思是我忘记添加路由器插座......我快疯了。谢谢! (2认同)

小智 11

获取<router-outlet>外部组件的路由自定义数据(Angular 8):

constructor(private router: Router) {}
    
ngOnInit() {
    this.router.events.subscribe(data => {
      if (data instanceof ActivationStart) {
        console.log(`Custom data`, data.snapshot.data);
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

  • 仅适用于导航,不适用于 Angular 12 上的页面加载 (6认同)