2017-08-12 1 views
0

Ich arbeite an einem kleinen Projekt, wo ich eine mobile erste Anwendung schreibe. Dafür plane ich eine Navbar oben auf dem Bildschirm und eine Folie im Menü auf der linken Seite. Ich möchte, dass diese Komponenten auf jeder Seite verfügbar sind.Welche Möglichkeiten gibt es, Ereignisse mit mehreren Komponenten zu behandeln?

Meine heutige Architektur ist wie folgt aufgebaut:

<app-component> 
-> <navbar-component> 
-> <sidemenu-component> 
-> <router-outlet><!-- The different pages will be placed here !--></router-outlet> 

Jetzt i auf eine Schaltfläche klicken, um in der Lage sein wollen, in der navbar-component die sidemenu-component zu öffnen.

Dafür benötige ich einen Verweis der anderen Komponente entweder im Sidemenu, um auf dem Klickereignis zu registrieren, oder in der Navigationsleiste, um das Sidemenü auszulösen.

Meine ursprüngliche Idee war, die @Input() und @Output() Eigenschaften zu verwenden, um die Referenzen der Komponenten zu übergeben.

//app-component.html 
<navbar-component [parentComponent]="referenceToAppComponent" (instance)="navbarComponent"></navbar-component> 
<sidemenu-component [parentComponent]="referenceToAppComponent" (instance)="sidemenuComponent"></sidemenu-component> 
+3

Nein, müssen Sie nicht Verweise auf Komponenten benötigen. Teilen Sie einfach einen Dienst zwischen den beiden Komponenten und geben Sie Ereignisse (unter Verwendung einer Observablen) von diesem freigegebenen Dienst aus. https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service –

+0

Sie könnten den Router dazu verwenden, dies zu tun. Sie könnten benannte Outlets verwenden und die Öffnung des Menüs als Route selbst ausdrücken und über die Navigationsleiste dorthin navigieren –

Antwort

0

Input, Output-APIs kann verwendet werden, wenn Sie Eltern/Kind Komponenten haben. So mit Input, Eltern wird Daten an Kind senden und mit Output, Kind kann Daten an Eltern senden.

Jetzt hier, Es scheint, dass Sie mit Geschwister-Komponente beschäftigen (ohne Eltern/Kind-Szenario). Für eine solche Art von Geschwister-Szenario kann ein gemeinsamer Dienst verwendet werden.
ABER SICHERSTELLEN, SINGLETON SHARED SERVICE zu verwenden.
Der gemeinsam genutzte Singleton-Dienst teilt eine einzelne Instanz des Dienstes in der gesamten App, sodass Sie zwischen gleichgeordneten Komponenten kommunizieren können.

Mehr Detail: https://angular.io/guide/component-interaction

Verwandte Themen