Angular 2 @Input: Können Daten von einer Komponente an eine andere untergeordnete Routenkomponente übergeben werden?

9

Gestützt auf die Dokumentation von Angular 2 können Sie Daten von einer Komponente an diese übergeben ein anderer ganz einfach mit dem @Input.

So kann ich zum Beispiel den Eltern so einstellen:

%Vor%

Und die Daten in der untergeordneten Komponente erhalten Sie so:

%Vor%

Es ist also ziemlich offensichtlich, übergebe die [hero]="data" an die Vorlage der Elternkomponente (natürlich in der Kindauswahl) und behandle sie in der Kindkomponente.

Aber hier ist das Problem.

Mein DOM-Element für untergeordnete Komponenten (in diesem Fall <hero-child> ) ist nicht in der Vorlage des übergeordneten Elements verfügbar, sondern wird dort in einem <router-outlet> -Element geladen.

Wie kann ich dann Daten an eine untergeordnete Route Komponente übergeben? Ist die Eingabe nicht der richtige Weg? Ich möchte doppelte, dreifache usw. Aufrufe vermeiden, um die gleichen Daten zu erhalten, die bereits in meiner übergeordneten Route / Komponente enthalten sind.

    
Vassilis Pits 31.08.2016, 14:52
quelle

3 Antworten

3

Ich glaube nicht, dass es eine Möglichkeit gibt, Objekte als Eingabe an eine Komponente zu übergeben, an die sie weitergeleitet wird. Ich habe dies erreicht, indem ich einen Service mit einem Observable verwendet habe, um die Daten zwischen einem Elternteil und einer oder mehreren Kindkomponenten zu teilen.

Im Grunde ruft die übergeordnete Komponente den Dienst auf und schiebt alle erforderlichen Daten dorthin. In meinem Fall ist es nur eine ID, aber es könnte alles sein. Der Service kann dann etwas mit diesen Daten machen (oder nicht). In meinem Beispiel rufe ich den Server an, um eine Firma basierend auf der ID zu erhalten, aber wenn Sie bereits das Objekt haben, das Sie brauchen, wird dieses nicht benötigt. Dann schiebt es ein Objekt in einen Observable-Stream, der in der Kindkomponente abonniert ist.

Übergeordnete Komponente:

%Vor%

Service:

%Vor%

Untergeordnete Komponente

%Vor%     
dmungin 14.12.2016 02:21
quelle
0

Erwägen Sie, einen Angular2-Dienst für @Input() oder @Output() zu erstellen, der mehr als eine Ebene oder eine nicht verwandte Komponente passieren soll.

    
Fan Jin 09.12.2016 21:00
quelle
0

Sie können erreichen, was Sie wollen:

  • Erstellen eines Dienstes, der einen Status für Sie enthält. Die untergeordnete Komponente kann später darauf zugreifen.
  • Übergeben der Daten mit dem Router (dynamische Route, queryParam, param). ZB: Benutzer /: id = & gt; Benutzer / 23
  • Übergeben der Daten mithilfe einer Zustandsverwaltungsbibliothek. ZB: Redux
Gerard Sans 19.12.2016 23:49
quelle