Saat ini saya menggunakan Angular 2. Biasanya kami menggunakan @Output() addTab = new EventEmitter<any>();
dan kemudian addTab.emit()
memancarkan acara ke komponen induk.
Adakah cara yang bisa kita lakukan wakil cersa, dari orang tua ke anak?
angular
typescript
kode1
sumber
sumber
Jawaban:
Dengan menggunakan RxJs , Anda dapat mendeklarasikan a
Subject
dalam komponen induk Anda dan meneruskannyaObservable
ke komponen anak, komponen anak hanya perlu berlangganan iniObservable
.Komponen Induk
Parent-HTML
Komponen Anak
sumber
this.eventsSubject.next({data});
pada orang tua, laluthis.events.subscribe(({data}) => doSomething(data));
pada anak.eventsSubject
ke Observable daripada hanya berlangganan sebagai Subjek?Sejauh yang saya tahu, ada 2 cara standar untuk melakukannya.
1. @Input
Setiap kali data dalam induk berubah, anak akan diberi tahu tentang hal ini dalam metode ngOnChanges. Anak itu bisa bertindak berdasarkan itu. Ini adalah cara standar berinteraksi dengan seorang anak.
Membuat layanan dan menggunakan yang dapat diamati di layanan bersama. Anak itu berlangganan dan setiap kali ada perubahan, anak itu akan diberi tahu. Ini juga merupakan metode yang populer. Ketika Anda ingin mengirim sesuatu selain data yang Anda berikan sebagai input, ini dapat digunakan.
sumber
<child [data]="inputToChild"> </child>
mungkin harus<child [data]="(inputToChild)"> </child>
mendapatkan perubahanDalam komponen induk, Anda bisa menggunakan @ViewChild () untuk mengakses metode / variabel komponen anak.
Memperbarui:
Angular 8 dan seterusnya -
sumber
numberComponent
akanundefined
.Gunakan dekorator @Input () dalam komponen anak Anda untuk memungkinkan induk mengikat masukan ini.
Dalam komponen anak Anda mendeklarasikannya apa adanya:
@Input() myInputName: myType
Untuk mengikat properti dari induk ke anak, Anda harus menambahkan dalam templat Anda tanda kurung pengikat dan nama input Anda di antara keduanya.
Contoh:
<my-child-component [myChildInputName]="myParentVar"></my-child-component>
Namun berhati-hatilah, objek diteruskan sebagai referensi, jadi jika objek diperbarui pada anak, var induknya akan terlalu diperbarui. Hal ini terkadang dapat menyebabkan beberapa perilaku yang tidak diinginkan. Dengan tipe primer nilainya disalin.
Untuk membaca lebih lanjut ini:
Docs: https://angular.io/docs/ts/latest/cookbook/component-communication.html
sumber
Di dalam induk, Anda bisa mereferensikan anak menggunakan @ViewChild. Jika diperlukan (misalnya, saat acara akan diaktifkan), Anda cukup menjalankan metode pada anak dari induk menggunakan referensi @ViewChild.
sumber