angular 2 - получить информацию от активного компонента

У меня есть страница с заголовком и телом. В заголовке есть кнопка HELP, которая должна открывать документацию. Ссылка на документацию параметризуется с помощью help-id, который зависит от того, какая страница отображается в данный момент.

Мне нужно обновить help-id в заголовке в зависимости от того, какой компонент в настоящее время отображается маршрутизатором. Другими словами, как правильно получить этот параметр (который представляет собой простую строку) из текущего активного компонента?

Я видел, как общение осуществляется с помощью службы, но мне кажется, что создание службы для такой простой задачи - это немного излишне.

Я пытался что-то вывести из кода Router и ActivatedRoute, но у меня ничего не получалось. События навигации не содержат ссылки на компонент, routerState.root.firstChild имеет значение null, когда приложение загружено.

РЕДАКТИРОВАТЬ:

здесь, в AppComponent мне нужен текущий help-id

export class AppComponent {
  private helpId;
}

Мои компоненты, которые отображаются в маршрутизаторе-выходе, имеют это свойство, например

export class HeroComponent {
  const helpId = 'hero';
}

export class HeroDetailsComponent {
  const helpId = 'hero-details';
}

Для каждого компонента определены маршруты, например

const heroesRoutes: Routes = [
  { path: 'heroes',  component: HeroComponent },
  { path: 'hero/:id', component: HeroDetailsComponent }
];

Мне нужен help-id текущего отображаемого компонента (отображаемого маршрутизатором), чтобы поддерживать ссылку справки в заголовке в актуальном состоянии. help-id не передается в параметрах маршрута.


person display-none    schedule 05.09.2016    source источник
comment
Добро пожаловать в StackOverflow. Добавьте к своему вопросу код, который демонстрирует, что вы пытаетесь сделать, позволяет воспроизвести и диагностировать проблему.   -  person Günter Zöchbauer    schedule 05.09.2016
comment
Что делать, если отображается более одного компонента? Вопрос требует большего контекста. Как и когда компоненты отображаются / скрываются / удаляются / ...?   -  person Günter Zöchbauer    schedule 05.09.2016
comment
Из того, что я вижу, есть только один компонент для каждого маршрута, который отображается по умолчанию router-outlet, мне нужно значение из этого   -  person display-none    schedule 05.09.2016
comment
Добавьте код, демонстрирующий, чего вы пытаетесь достичь.   -  person Günter Zöchbauer    schedule 05.09.2016
comment
Но я не знаю, как это делать, поэтому и задал вопрос. Что неясно в вопросе или контексте?   -  person display-none    schedule 05.09.2016


Ответы (1)


Это действительно можно сделать с помощью ActivatedRoute.

Вам нужно ввести его в свой компонент:

contructor(private route: ActivatedRoute) {} 

Затем вам нужно прослушать событие изменения маршрута, например:

ngOnInit() {
    this.route.params.subscribe(params => {
        // route info is stored in `params`
        console.log(params);
    });
}
person tibbus    schedule 05.09.2016
comment
нужный мне параметр не передается в URL-адресе, он жестко запрограммирован в каждом компоненте, см. редактировать - person display-none; 05.09.2016
comment
Тогда это должно быть сделано через Сервис, неважно, что это очень маленький сервис. Любое общение осуществляется службами в Angular2, только между одноуровневыми компонентами может осуществляться через '@Input' - '@Output' - person tibbus; 05.09.2016
comment
спасибо большое, если вы превратите это в ответ, я приму - person display-none; 05.09.2016