2016-02-18 20 views
9

Tôi có thể nghe các thay đổi trên ngModel như thế nào? Vấn đề: là nếu tôi liên kết (thay đổi) hoặc (nhấp) sự kiện với phần tử, trong hàm đã cho khi tôi truy cập vào mô hình, nó vẫn không thay đổi. Nếu tôi thêm setTimeout của 500ms hơn tôi có thể thay đổi mô hình. Bất kỳ ý tưởng làm thế nào tôi có thể nhận được các đối tượng thay đổi thực sự mà không có setTimeout đó là cách rất xấu? Mã trong html:Góc 2 nghe về thay đổi mô hình

<input type="checkbox" (click)="autoJoinToggle()" [(ngModel)]='active.bookmark.autoJoin'> Autojoin 

Mã trong thành phần:

console.log(this.active.bookmark.autoJoin) // returns the current value (before the change) 
setTimeout(() => {console.log(this.active.bookmark.autoJoin);}, 500); //returns the value after the change 

tôi không thể làm điều này với điều khiển góc bởi vì tôi cần mô hình binded và đối tượng "hoạt động" không tồn tại ở vị trí đầu tiên , và nếu tôi muốn cập nhật giá trị của điều khiển sau khi "hoạt động" được xác định, tôi cần phải nghe những thay đổi trên đối tượng "hoạt động" (thay đổi làm thêm giờ). Cùng một vấn đề là với biến địa phương và @ViewChild -> Tôi vẫn cần phải biết khi nào "hoạt động" thay đổi vì vậy tôi cập nhật các biến địa phương quá.

Đây là một gif cũng như: enter image description here

Trả lời

7
(ngModelChange)="doSomething($event)" 

hoặc

autoJoinToggle(cb){ this.active.bookmark.autoJoin = cb; //do something.. } 

<input #cb type="checkbox" (click)="autoJoinToggle(cb.checked)" 
    [(ngModel)]='active.bookmark.autoJoin'> 

Tôi nghĩ rằng hành vi mà bạn giải thích là một lỗi dù và một yêu cầu kéo đã cung cấp nhưng chưa thêm https://github.com/angular/angular/issues/6311.

+1

Giải pháp này có biến cục bộ + ngModel hoạt động nhưng trong hàm doSomething tôi đặt rõ ràng 'this.active.autoJoin = cb.checked' mà tôi đoán là ổn cho giải pháp tạm thời cho đến khi sự cố được khắc phục –

+0

Bạn có thể thêm ' autoJoinToggle (cb) { this.active.bookmark.autoJoin = cb; // làm điều gì đó .. } ' vì vậy nó sẽ là giải pháp hoàn chỉnh cho người khác xem –

Các vấn đề liên quan