Nếu bạn đang sử dụng FormBuilder
, hãy xem câu trả lời của @ dfsq.
Nếu bạn không sử dụng FormBuilder
, có hai cách để được thông báo về các thay đổi.
Phương pháp 1
Như đã thảo luận trong các ý kiến về câu hỏi, sử dụng một ràng buộc sự kiện trên mỗi yếu tố đầu vào. Thêm vào mẫu của bạn:
<input type="text" class="form-control" required [ngModel]="model.first_name"
(ngModelChange)="doSomething($event)">
Sau đó, trong thành phần của bạn:
doSomething(newValue) {
model.first_name = newValue;
console.log(newValue)
}
Các hình thức trang có thêm một số thông tin về ngModel có liên quan ở đây:
Đây ngModelChange
không phải là một <input>
sự kiện yếu tố. Nó thực sự là một tài sản sự kiện của NgModel
chỉ thị. Khi Angular nhìn thấy một mục tiêu ràng buộc trong biểu mẫu [(x)]
, nó hy vọng lệnh x
sẽ có thuộc tính x
đầu vào và thuộc xChange
tính đầu ra.
Sự kỳ lạ khác là biểu thức mẫu , model.name = $event
. Chúng ta thường thấy một $event
đối tượng đến từ một sự kiện DOM. Thuộc tính ngModelChange không tạo ra sự kiện DOM; đó là một thuộc tính Angular EventEmitter
trả về giá trị hộp đầu vào khi nó kích hoạt ..
Chúng tôi hầu như luôn luôn thích [(ngModel)]
. Chúng tôi có thể phân chia ràng buộc nếu chúng tôi phải làm một điều gì đó đặc biệt trong việc xử lý sự kiện như gỡ lỗi hoặc điều tiết các nét chính.
Trong trường hợp của bạn, tôi cho rằng bạn muốn làm một cái gì đó đặc biệt.
Cách 2
Xác định một biến mẫu cục bộ và đặt nó thành ngForm
.
Sử dụng ngControl trên các yếu tố đầu vào.
Nhận tham chiếu đến chỉ thị NgForm của biểu mẫu bằng cách sử dụng @ViewChild, sau đó đăng ký Nhóm điều khiển của NgForm để biết các thay đổi:
<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
Để biết thêm thông tin về Phương pháp 2, hãy xem video của Savkin .
Xem thêm câu trả lời của @ Thierry để biết thêm thông tin về những gì bạn có thể làm với valueChanges
khả năng quan sát được (chẳng hạn như thảo luận / chờ đợi một chút trước khi xử lý các thay đổi).