Tôi có chỉ thị và trên đó là một số @Input
chấp nhận một lớp.Trong angular2, cách nhận được cácThay đổi đối với các thuộc tính được thay đổi trên một đối tượng được gửi cho một @Input
@Directive({selector: 'my-directive'})
@View({directives: [CORE_DIRECTIVES]})
export class MyDirective {
@Input() inputSettings : SettingsClass;
@Input() count : number;
onChanges(map) {
console.log('onChanges');
}
}
Chỉ thị được sử dụng trong html:
...
<my-directive [input-settings]="settings" [count]="settings.count"></my-directive>
...
Nếu settings.count được thay đổi thì onChanges
sẽ cháy. Nếu bất kỳ thuộc tính nào khác trên lớp cài đặt thay đổi, thì nó sẽ không kích hoạt.
Làm cách nào để phát hiện xem có thay đổi đối với bất kỳ thuộc tính nào trên cài đặt không?
tôi đoán được này (hiện tại?) không hoạt động ... có thể vì 'inputSettings' chứa tham chiếu đến một đối tượng của một đối tượng và vì tham chiếu không thay đổi, Angular có thể không cố so sánh các thuộc tính đối tượng để nó không nhìn thấy hoặc báo cáo thay đổi. (Tôi hy vọng tôi sai, hoặc tôi hy vọng họ sửa lỗi này.) –
Thật vậy, [bài đăng trên blog của Victor Savkin] (http://victorsavkin.com/post/133936129316/angular-immutability-and-encapsulation) đã xác nhận các giả định của tôi: "Nếu đối tượng địa chỉ có thể thay đổi, một số thành phần khác có thể cập nhật thuộc tính đường phố mà không cần tạo đối tượng địa chỉ mới. Nếu điều này xảy ra, hook onChanges sẽ không được gọi". –
bạn cũng có thể sử dụng getter và setter cho thuộc tính đầu vào thuộc tính – Ayyash