Saya memiliki komponen Angular2 di komponen yang saat ini memiliki banyak bidang yang memiliki @Input () diterapkan sebelum mereka untuk memungkinkan pengikatan ke properti itu, yaitu
@Input() allowDay: boolean;
Apa yang ingin saya lakukan sebenarnya adalah mengikat ke properti dengan get / set, sehingga saya bisa melakukan beberapa logika lain di setter, sesuatu seperti berikut
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
bagaimana saya melakukan ini di Angular2?
Berdasarkan saran Thierry Templier, saya mengubahnya, tetapi itu melempar kesalahan Tidak dapat mengikat ke 'allowDay' karena itu bukan properti asli yang dikenal:
//@Input() allowDay: boolean;
_allowDay: boolean;
get allowDay(): boolean {
return this._allowDay;
}
@Input('allowDay') set allowDay(value: boolean) {
this._allowDay = value;
this.updatePeriodTypes();
}
[allowDay]="....". If the field (setter) name and the property name you want to use for binding are the same, you can omit the parameter for
@Input (...) `.Jawaban:
Anda bisa mengatur @Input pada setter secara langsung, seperti dijelaskan di bawah ini:
Lihat plunkr ini: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview .
sumber
directives
atribut komponen tempat Anda ingin menggunakannya ... Saya memperbarui jawaban saya.setter
akan tidak dipicu oleh mutasi pada nilai-nilai yang dikirimkan dengan referensi (yaitu mendorong ke array, bermutasi objek, dll). Anda perlu mengganti seluruh nilai yang diteruskan sebagaiInput
untuksetter
memicu lagi.Jika Anda terutama tertarik untuk mengimplementasikan logika ke setter saja :
Impor
SimpleChanges
tidak diperlukan jika tidak masalah properti input mana yang diubah atau jika Anda hanya memiliki satu properti input.Doc Sudut: OnChanges
jika tidak:
sumber
@Input
properti dan Anda ingin memanggil rutin ketika salah satu dari mereka telah berubah. Jadi lebih sedikit kode yang dibutuhkan.@ Paul Cavacas, saya memiliki masalah yang sama dan saya menyelesaikannya dengan mengatur
Input()
dekorator di atas pengambil.Lihat penjungkal ini: https://plnkr.co/edit/6miSutgTe9sfEMCb8N4p?p=preview
sumber
Jawaban yang diterima yang diperbarui untuk sudut 7.0.1 di stackblitz di sini: https://stackblitz.com/edit/angular-inputsetter?embed=1&file=src/app/app.component.ts
directives
tidak ada lagi dalam opsi dekorator Komponen. Jadi saya telah memberikan sub direktif ke modul aplikasi.terima kasih @ thierry-templier !
sumber