Die app.component.ts
ist der Einstiegspunkt meiner Angular 2 App. Es enthält zwei Komponenten: eine Kopfzeile und eine sidenav.Wie kommuniziert man zwischen zwei Komponenten ohne Eltern-Kind-Beziehung?
@Component({
selector: 'app-root',
template: `
<app-header></app-header>
<app-sidenav></app-sidenav>
`
})
export class AppComponent { }
Hier ist, was ich erreichen möchte: In der <app-header>
Komponente Ich habe eine (Menü) Taste, die die Öffnung des <app-sidenav>
Komponente auslösen soll.
Mit anderen Worten, ein Klickereignis auf der Schaltfläche in der <app-header>
sollte die open()
Methode innerhalb der <app-sidenav>
Komponente auslösen.
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(); } }
las ich die component interaction section in den Angular 2 docs , aber ich habe Mühe zu finden der beste Ansatz, um zwischen diesen beiden Komponenten zu kommunizieren. Die allgemeine Absicht, die ich habe, ist es, so viel Logik wie möglich für jede Komponente einzukapseln.
Wie würden Sie meinen Anwendungsfall angehen? Würden Sie einen Zwischenservice erstellen? Bitte teilen Sie ein Beispiel.
https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service (fragen Sie nicht, warum die Überschrift "Eltern- und Kinderkommunikation" lautet. Die Verwendung eines Dienstes ist für Komponentenkommunikation, egal wie sie sind oder nicht verwandt sind –