Ich verwende derzeit Angular 2. Normalerweise verwenden wir @Output() addTab = new EventEmitter<any>();
und addTab.emit()
senden dann ein Ereignis an die übergeordnete Komponente.
Gibt es eine Möglichkeit, dies von Eltern zu Kind zu tun?
angular
typescript
Code1
quelle
quelle
Antworten:
Mit RxJs können Sie a
Subject
in Ihrer übergeordneten Komponente deklarieren und als untergeordnete Komponente übergeben. Die untergeordneteObservable
Komponente muss diese nur abonnierenObservable
.Übergeordnete Komponente
Eltern-HTML
Untergeordnete Komponente
quelle
this.eventsSubject.next({data});
beim Elternteil, dannthis.events.subscribe(({data}) => doSomething(data));
beim Kind.eventsSubject
zu einem Observable konvertieren , anstatt es nur als Betreff zu abonnieren?Soweit ich weiß, gibt es zwei Standardmethoden, wie Sie dies tun können.
1. @Input
Immer wenn sich die Daten im übergeordneten Element ändern, wird das untergeordnete Element in der ngOnChanges-Methode darüber benachrichtigt. Das Kind kann darauf einwirken. Dies ist die Standardmethode für die Interaktion mit einem Kind.
Erstellen eines Dienstes und Verwenden eines Observable im gemeinsam genutzten Dienst. Das Kind abonniert es und bei jeder Änderung wird das Kind benachrichtigt. Dies ist auch eine beliebte Methode. Wenn Sie etwas anderes als die Daten senden möchten, die Sie als Eingabe übergeben, kann dies verwendet werden.
quelle
<child [data]="inputToChild"> </child>
sollte wahrscheinlich sein<child [data]="(inputToChild)"> </child>
, um Änderungen zu bekommenIn einer übergeordneten Komponente können Sie mit @ViewChild () auf die Methode / Variable der untergeordneten Komponente zugreifen.
Aktualisieren:
Winkel 8 ab -
quelle
numberComponent
sein wirdundefined
.Verwenden Sie den Dekorator @Input () in Ihrer untergeordneten Komponente, damit das übergeordnete Element an diese Eingabe binden kann.
In der untergeordneten Komponente deklarieren Sie sie wie folgt:
@Input() myInputName: myType
Um eine Eigenschaft vom übergeordneten Element an ein untergeordnetes Element zu binden, müssen Sie in Ihrer Vorlage die Bindungsklammern und den Namen Ihrer Eingabe zwischen ihnen hinzufügen.
Beispiel:
<my-child-component [myChildInputName]="myParentVar"></my-child-component>
Beachten Sie jedoch, dass Objekte als Referenz übergeben werden. Wenn das Objekt im untergeordneten Objekt aktualisiert wird, wird die Variable des Elternteils zu aktualisiert. Dies kann irgendwann zu unerwünschtem Verhalten führen. Bei Primärtypen wird der Wert kopiert.
Um weiter zu gehen, lesen Sie Folgendes:
Dokumente: https://angular.io/docs/ts/latest/cookbook/component-communication.html
quelle
Innerhalb des übergeordneten Elements können Sie mit @ViewChild auf das untergeordnete Element verweisen. Bei Bedarf (dh wenn das Ereignis ausgelöst wird) können Sie einfach eine Methode im untergeordneten Element vom übergeordneten Element mithilfe der @ ViewChild-Referenz ausführen.
quelle