Obecnie używam Angular 2. Zwykle używamy, @Output() addTab = new EventEmitter<any>();
a następnie addTab.emit()
emitujemy zdarzenie do komponentu nadrzędnego.
Czy jest jakiś sposób, żebyśmy mogli to zrobić vice cersa, od rodzica do dziecka?
angular
typescript
kod1
źródło
źródło
Odpowiedzi:
Używając RxJs , możesz zadeklarować a
Subject
w komponencie nadrzędnym i przekazać go jakoObservable
komponent potomny, komponent potomny po prostu musi to zasubskrybowaćObservable
.Element nadrzędny
Nadrzędny HTML
Komponent potomny
źródło
this.eventsSubject.next({data});
u rodzica, potemthis.events.subscribe(({data}) => doSomething(data));
w dziecku.eventsSubject
na Observable zamiast po prostu subskrybować go jako podmiot?O ile wiem, możesz to zrobić na 2 standardowe sposoby.
1. @Input
Za każdym razem, gdy zmieniają się dane w rodzicu, dziecko jest o tym powiadamiane w metodzie ngOnChanges. Dziecko może na to działać. To jest standardowy sposób interakcji z dzieckiem.
Tworzenie usługi i używanie obserwowalnego w usłudze wspólnej. Dziecko subskrybuje ją, a gdy zajdzie zmiana, zostanie o tym powiadomione. Jest to również popularna metoda. Jeśli chcesz wysłać coś innego niż dane, które przekazujesz jako dane wejściowe, możesz tego użyć.
źródło
<child [data]="inputToChild"> </child>
prawdopodobnie powinno być,<child [data]="(inputToChild)"> </child>
aby uzyskać zmianyW komponencie nadrzędnym możesz użyć @ViewChild (), aby uzyskać dostęp do metody / zmiennej komponentu potomnego.
Aktualizacja:
Kątowy od 8 wzwyż -
źródło
numberComponent
będzieundefined
.Użyj dekoratora @Input () w komponencie podrzędnym, aby umożliwić rodzicowi powiązanie z tym wejściem.
W komponencie potomnym deklarujesz, jak jest:
@Input() myInputName: myType
Aby powiązać właściwość między rodzicem a dzieckiem, musisz dodać w szablonie nawiasy wiążące i nazwę wejścia między nimi.
Przykład:
<my-child-component [myChildInputName]="myParentVar"></my-child-component>
Ale uwaga, obiekty są przekazywane jako referencje, więc jeśli obiekt jest aktualizowany w dziecku, zmienna rodzica będzie zbyt zaktualizowana. Może to czasem prowadzić do niechcianego zachowania. W przypadku typów podstawowych wartość jest kopiowana.
Aby przejść dalej, przeczytaj to:
Dokumenty: https://angular.io/docs/ts/latest/cookbook/component-communication.html
źródło
W ramach elementu nadrzędnego możesz odwoływać się do dziecka za pomocą @ViewChild. W razie potrzeby (tj. Gdy zdarzenie zostanie wyzwolone), możesz po prostu wykonać metodę w dziecku z rodzica, używając odwołania @ViewChild.
źródło