Anda tidak dapat menggunakan operator ekspresi Templat (pipa, simpan navigator) dalam pernyataan templat:
(ngModelChange)="Template statements"
(ngModelChange) = "item.value | useMyPipeToFormatThatValue = $ event"
https://angular.io/guide/template-syntax#template-statements
Seperti halnya ekspresi template, pernyataan template menggunakan bahasa yang mirip dengan JavaScript. Parser pernyataan template berbeda dari Parser ekspresi template dan secara khusus mendukung penugasan dasar (=) dan ekspresi chaining (dengan; atau,).
Namun, sintaksis JavaScript tertentu tidak diizinkan :
- baru
- operator kenaikan dan penurunan, ++ dan -
- tugas operator, seperti + = dan - =
- operator bitwise | dan &
- operator ekspresi template
Jadi Anda harus menuliskannya sebagai berikut:
<input [ngModel]="item.value | useMyPipeToFormatThatValue"
(ngModelChange)="item.value=$event" name="inputField" type="text" />
Contoh Plunker
item.value
adalah angka, dan Anda gunakanDatePipe
untuk mengubahnya menjadi string tanggal. Ketika tanggal diedit,$event
itu juga akan menjadi string tanggal dan tidak akan cocok kembali keitem.value
Anda harus membalikkan apa yang dilakukan pipa dalam(ngModelChange)
ekspresi Anda - yaitu, mengubah string tanggal kembali ke angka.(ngModelChange)="updateItemValue($event)"
, lalu buatupdateItemValue(date: string)
metode dan di dalamnyaitem.value = someConversionFunction(date);
Sekarang jika Anda bertanya apa yang harus Anda gunakan sebagai fungsi konversi, saya tidak tahu. MungkinDate.parse()
berhasil.Solusinya di sini adalah untuk membagi pengikatan menjadi pengikatan satu arah dan pengikatan peristiwa - yang
[(ngModel)]
sebenarnya mencakup sintaks .[]
adalah sintaks pengikatan satu arah dan()
sintaks pengikatan acara. Ketika digunakan bersama-sama -[()]
Angular mengakui ini sebagai steno dan mengikat pengikatan dua arah dalam bentuk pengikatan satu arah dan peristiwa yang mengikat ke nilai objek komponen.Alasan Anda tidak dapat menggunakan
[()]
pipa adalah karena pipa hanya berfungsi dengan binding satu arah. Oleh karena itu Anda harus membagi pipa untuk hanya beroperasi pada penjilidan satu arah dan menangani acara secara terpisah.Lihat Sintaks Templat Angular untuk info lebih lanjut.
sumber
Saya ingin menambahkan satu poin lagi ke jawaban yang diterima.
Jika jenis kontrol input Anda bukan teks, pipa tidak akan berfungsi.
Ingatlah dan hemat waktu Anda.
sumber
Saya mencoba solusi di atas namun nilai yang masuk ke model adalah nilai yang diformat kemudian kembali dan memberi saya kesalahan currencyPipe. Jadi saya harus melakukannya
Dan pada fungsi addToAmount -> perubahan blur menyebabkan ngModelChange memberi saya masalah kursor.
Dan menghapus nilai-nilai non numerik lainnya.
sumber
Solusi saya diberikan di bawah sini searchDetail adalah objek ..
sumber
Anda harus menggunakan [ngModel] alih-alih model dua arah mengikat dengan [(ngModel)]. kemudian gunakan acara perubahan manual dengan (ngModelChange). ini adalah aturan umum untuk semua input dua arah dalam komponen.
karena pipa pada event emitor salah.
sumber
karena dua cara mengikat, Untuk mencegah kesalahan:
Anda dapat memanggil fungsi untuk mengubah model seperti ini:
akan lebih baik jika ada solusi yang lebih baik untuk mencegah kesalahan ini.
sumber