Ya, Anda dapat mengatur input komponen yang ditampilkan melalui outlet router . Sayangnya, Anda harus melakukannya secara terprogram, seperti yang disebutkan dalam jawaban lain. Ada peringatan besar untuk hal itu ketika observasi dilibatkan (dijelaskan di bawah).
Begini caranya:
(1) Hubungkan ke acara router-outlet activate
di template induk:
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(2) Beralih ke file skrip induk dan setel input komponen anak secara terprogram setiap kali mereka diaktifkan:
onOutletLoaded(component) {
component.node = 'someValue';
}
Versi di atas onOutletLoaded
disederhanakan agar lebih jelas, tetapi hanya berfungsi jika Anda dapat menjamin semua komponen turunan memiliki input yang sama persis dengan yang Anda tetapkan. Jika Anda memiliki komponen dengan input berbeda, gunakan pelindung tipe:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
Mengapa metode ini lebih disukai daripada metode layanan?
Baik metode ini maupun metode layanan bukanlah "cara yang tepat" untuk berkomunikasi dengan komponen turunan (kedua metode menjauh dari pengikatan template murni), jadi Anda hanya perlu memutuskan cara mana yang dirasa lebih sesuai untuk proyek tersebut.
Namun, metode ini memungkinkan Anda untuk menghindari pembuatan objek perantara (layanan), yang secara erat memasangkan komponen layanan dan turunan. Dalam banyak kasus, hal ini terasa lebih dekat dengan "cara sudut" karena Anda dapat terus meneruskan data ke komponen anak Anda melalui @Inputs. Ini juga cocok untuk komponen yang sudah ada atau pihak ketiga yang tidak Anda inginkan atau tidak dapat digabungkan dengan layanan itu. Di sisi lain, mungkin terasa kurang seperti sudut ketika ...
Peringatan
Peringatan dengan metode ini adalah karena Anda meneruskan data secara terprogram, Anda tidak lagi memiliki opsi untuk meneruskan data yang dapat diamati di template Anda (kejutan!). Itu berarti Anda kehilangan keuntungan besar dari pengelolaan angular dalam siklus hidup yang dapat diamati saat Anda menggunakan pola pipa-asinkron.
Sebaliknya, Anda harus menyiapkan sesuatu untuk mendapatkan nilai yang dapat diamati saat ini setiap kali onChildLoaded
fungsi tersebut dipanggil. Ini kemungkinan juga akan membutuhkan beberapa pembongkaran dalam onDestroy
fungsi komponen induk . Ini tidak terlalu aneh, ada kasus lain di mana hal ini perlu dilakukan, seperti saat menggunakan observable yang bahkan tidak sampai ke template.
node
mana itu sebagai tipestring
dan sepertinya tidak berhasil atau saya melakukan sesuatu yang salah