Saya sedang menulis komponen Angular yang memiliki properti Mode(): string
.
Saya ingin dapat menyetel properti ini secara terprogram tidak menanggapi peristiwa apa pun.
Masalahnya adalah bahwa dengan tidak adanya acara browser, pengikatan templat {{Mode}}
tidak diperbarui.
Apakah ada cara untuk memicu deteksi perubahan ini secara manual?
ChangeDetectorRef.detectChanges()
. validator diaktifkan sebelum arahan saya dapat memperbarui nilai input.Saya menggunakan referensi jawaban yang diterima dan ingin memberi contoh, karena dokumentasi Angular 2 sangat sulit dibaca, saya harap ini lebih mudah:
Impor
NgZone
:Tambahkan ke konstruktor kelas Anda
Jalankan kode dengan
zone.run
:sumber
zone.run
kode dan apa sebenarnyadonations
?Saya dapat memperbaruinya dengan markForCheck ()
Impor ChangeDetectorRef
Suntikkan dan instantiate
Akhirnya tandai deteksi perubahan untuk dilakukan
Berikut ini contoh di mana markForCheck () berfungsi dan mendeteksiChanges () tidak.
https://plnkr.co/edit/RfJwHqEVJcMU9ku9XNE7?p=preview
(Tekan STOP / RUN untuk menjalankannya lagi)
sumber
Di Angular 2+, coba dekorator @Input
Hal ini memungkinkan untuk mengikat properti yang bagus antara komponen induk dan anak.
Pertama buat variabel global di induk untuk memegang objek / properti yang akan diteruskan ke anak.
Selanjutnya buat variabel global pada anak untuk memegang objek / properti yang diteruskan dari induknya.
Kemudian di html induk, tempat templat turunan digunakan, tambahkan notasi tanda kurung siku dengan nama variabel turunan, lalu setel sama dengan nama variabel induk. Contoh:
Akhirnya, di mana properti anak didefinisikan dalam komponen anak, tambahkan dekorator Input:
Ketika variabel induk Anda diperbarui, itu harus melewati pembaruan ke komponen anak, yang akan memperbarui html-nya.
Juga, untuk memicu fungsi dalam komponen anak, lihat ngOnChanges.
sumber
ChangeDetectorRef.detectChanges () - mirip dengan $ scope. $ Digest () - yaitu, periksa hanya komponen ini dan anak-anaknya
sumber