app.component.ts
является точкой входа моего приложения Angular 2. Он содержит два компонента: заголовок и sidenav.Как общаться между двумя компонентами без отношения родитель-ребенок?
@Component({
selector: 'app-root',
template: `
<app-header></app-header>
<app-sidenav></app-sidenav>
`
})
export class AppComponent { }
Вот что я хочу добиться: Внутри <app-header>
компонента У меня есть кнопка (меню), которое должно вызвать открытие <app-sidenav>
компонента.
Другими словами, событие click на кнопке в <app-header>
должно инициировать метод open()
внутри компонента <app-sidenav>
.
header.component.ts:
@Component({ selector: 'app-header', template: ` <button (click)="onSidenavOpen()">Menu</button> ` }) export class HeaderComponent { constructor() { } onSidenavOpen() { // trigger the opening of the <app-sidenav> component } }
sidebar.component.ts:
@Component({ selector: 'app-sidenav', template: ` <md-sidenav #sidenav> // bla bla, sidebar </md-sidenav> ` }) export class SidenavComponent { constructor() { } open(sidenav) { sidenav.open(); } close(sidenav) { sidenav.close(); } }
Я прочитал component interaction section в угловом 2 Docs , но я изо всех сил пытаюсь найти лучший подход к общению между этими двумя компонентами. Общее намерение заключается в том, чтобы инкапсулировать как можно больше логики для каждого компонента.
Как бы вы приблизились к моему брэнду? Создать промежуточную службу? Пожалуйста, поделитесь примером.
https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service (не спрашивайте, почему в заголовке указано «Передача родителей и детей». для связи компонентов, независимо от того, как они связаны или не связаны. –