Angular ActivatedRoute data возвращает пустой объект

у меня есть маршрут, зарегистрированный с некоторыми данными:

const routes: Routes = 
[
    {path: 'my-route', data: { title: 'MyTitle' }, component: MyComponent},
];

и я пытаюсь получить доступ к данным в пути с помощью ActivatedRoute:

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

@Component({...})
export class MyComponent implements OnInit {
  constructor(private route: ActivatedRoute) {}

  public ngOnInit() {
    this.routeData = this.route.data.subscribe((data) => {
      console.log(data); // this is returning an empty object {}
    });
  }
}

но по каким-то причинам data - это пустой объект.

как решить эту проблему?

3 ответов


Edit: проблема в том, что я пытался получить доступ к 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;
      }
    });
  }
}

делать так this.routeData будет содержать данные маршрута, которые мне нужны (в моем случае страница title).


Я не знаю версию, но с Угловое 6, это сработало для меня:

(конечно, благодаря shinDath)

  routeData;
  ngOnInit() {
    //child route param doesnt go up to parent route params.
    this.router.events.subscribe((val) => {
      if (val instanceof ActivationEnd) {
        if(!$.isEmptyObject(val.snapshot.params)){
          this.routeData = val.snapshot.params;
        }
      }
    });
  }

ниже должно работать:

constructor(private route: ActivatedRoute) {}

ngOnInit() {
    console.log(this.route.snapshot.data);
}