Tôi đang cố gắng phân biệt giữa thay đổi nội bộ và thay đổi bên ngoài với thuộc tính ràng buộc dữ liệu hai chiều ('='
).
Nói cách khác: Tôi không muốn $watch
kích hoạt giá trị nếu thay đổi là nội bộ (tức là biến phạm vi đã được thay đổi trong bộ điều khiển hoặc trong hàm liên kết).
Dưới đây một số mã để minh họa vấn đề của tôi:
HTML
<div ng-app="myApp">
<div ng-controller="MainCtrl">
<input ng-model="value"/>
<mydemo value="value"></mydemo>
</div>
</div>
Javascript
app.directive('mydemo', function() {
return {
restrict: 'E',
scope: {
value: "="
},
template: "<div id='mydiv'>Click to change value attribute</div> Value:{{value}}",
link: function (scope, elm)
{
scope.$watch('value', function (newVal) {
//Don't listen if the change came from changeValue function
//Listen if the change came from input element
});
// Otherwise keep any model syncing here.
var changeValue = function()
{
scope.$apply(function()
{
scope.value = " from changeValue function";
});
}
elm.bind('click', changeValue);
}
}
})
Live Demo: http://jsfiddle.net/B7hT5/11/
Bất kỳ ý tưởng nào tôi có thể phân biệt?
Cảm ơn ... Tôi nghĩ có một giải pháp đơn giản và thanh lịch cho vấn đề này ... – cheziHoyzer