Đây là vấn đề của tôi. Ví dụ, chúng tôi có các chỉ thị sau đây, trong đó sử dụng một số phụ tùng jQuery đằng sau hậu trường:Chỉ thị AngularJS - các phương pháp hay nhất khi sử dụng ngModel với tiện ích jQuery
module.directive('myWidget', [function() {
return {
require: "ngModel",
restrict: "A",
replace: true,
templateUrl: "templates/myWidget.html",
link: function(scope, element, attrs, ctrl) {
element.widget_name().on('value_updated', function(event) {
scope.$apply(function() {
var newModelValue = event.some_value;
ctrl.$setViewValue(newModelValue);
});
});
scope.$watch(attrs["ngModel"], function(value){
element.widget_name('set_value', value);
});
}
};
}]);
Vì vậy, nếu thay đổi giá trị của mô hình, sau đó xử lý được đăng ký sử dụng $ đồng hồ để nghe cho những thay đổi trong mô hình sẽ được thực thi và, do đó, phương thức 'set_value' của widget cũng sẽ được thực thi. Điều này có nghĩa là sự kiện 'value_updated' sẽ được kích hoạt.
Câu hỏi của tôi là: thực tiễn tốt nhất để thực hiện hành vi tương tự trong chỉ thị để tránh các cuộc gọi bổ sung của trình xử lý sự kiện DOM và trình theo dõi là gì?
Cảm ơn Mark, giải pháp của bạn là giải quyết hoàn toàn vấn đề của tôi. Nhưng bạn có thể vui lòng cho biết - khi nào thích hợp để sử dụng người theo dõi và khi thực hiện $ render? – oaleynik
@oaleynik, $ render() nên được triển khai bất cứ khi nào bạn muốn làm điều gì đó vì giá trị ng-model đã được thay đổi bên trong Góc. ng-model tự động thiết lập đồng hồ cho chúng ta và $ render() được gọi nếu nó nhận thấy một sự thay đổi. Vì vậy, thông thường, với ng-model, bạn muốn thực hiện $ render thay vì sử dụng đồng hồ $ của riêng bạn. –