หากคุณใช้งานอยู่FormBuilder
ให้ดูคำตอบของ @ dfsq
หากคุณไม่ได้ใช้FormBuilder
มีสองวิธีในการแจ้งเตือนการเปลี่ยนแปลง
วิธีที่ 1
ตามที่กล่าวไว้ในความคิดเห็นเกี่ยวกับคำถามให้ใช้การผูกเหตุการณ์ในแต่ละองค์ประกอบอินพุต เพิ่มในแม่แบบของคุณ:
<input type="text" class="form-control" required [ngModel]="model.first_name"
(ngModelChange)="doSomething($event)">
จากนั้นในองค์ประกอบของคุณ:
doSomething(newValue) {
model.first_name = newValue;
console.log(newValue)
}
แบบฟอร์มหน้าเว็บมีข้อมูลเพิ่มเติมบางอย่างเกี่ยวกับ ngModel ที่เกี่ยวข้องที่นี่:
ngModelChange
ไม่ได้เป็น<input>
เหตุการณ์องค์ประกอบ เป็นจริงคุณสมบัติเหตุการณ์ของNgModel
คำสั่ง เมื่อแองกูลาร์เห็นเป้าหมายที่มีผลผูกพันในรูปแบบ[(x)]
มันคาดว่าx
คำสั่งที่จะมีx
คุณสมบัติการป้อนข้อมูลและคุณสมบัติการxChange
ส่งออก
อีกสิ่งที่แปลกประหลาดคือเทมเพลตนิพจน์, model.name = $event
. เราเคยเห็น$event
วัตถุที่มาจากเหตุการณ์ DOM คุณสมบัติ ngModelChange ไม่สร้างเหตุการณ์ DOM มันเป็นเชิงมุมEventEmitter
คุณสมบัติที่ส่งกลับค่ากล่องใส่เมื่อมันยิง ..
เรามักจะชอบ [(ngModel)]
เรามักจะชอบเราอาจแบ่งการเชื่อมโยงถ้าเราต้องทำสิ่งพิเศษในการจัดการเหตุการณ์เช่น debounce หรือ throttle การกดแป้น
ในกรณีของคุณฉันคิดว่าคุณต้องการทำอะไรเป็นพิเศษ
วิธีที่ 2
ngForm
กำหนดตัวแปรแม่แบบท้องถิ่นและตั้งค่าให้
ใช้ ngControl กับองค์ประกอบอินพุต
รับการอ้างอิงถึงคำสั่ง NgForm ของแบบฟอร์มโดยใช้ @ViewChild จากนั้นสมัครสมาชิกกลุ่มควบคุมของ NgForm สำหรับการเปลี่ยนแปลง:
<form #myForm="ngForm" (ngSubmit)="onSubmit()">
....
<input type="text" ngControl="firstName" class="form-control"
required [(ngModel)]="model.first_name">
...
<input type="text" ngControl="lastName" class="form-control"
required [(ngModel)]="model.last_name">
class MyForm {
@ViewChild('myForm') form;
...
ngAfterViewInit() {
console.log(this.form)
this.form.control.valueChanges
.subscribe(values => this.doSomething(values));
}
doSomething(values) {
console.log(values);
}
}
plunker
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ 2 ให้ดูวิดีโอ Savkin ของ
ดูคำตอบของ @ Thierry สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณสามารถทำได้กับสิ่งที่valueChanges
สังเกตได้ (เช่นการ debouncing / รอสักครู่ก่อนที่จะประมวลผลการเปลี่ยนแปลง)