Я пытаюсь различать внутреннее изменение и внешнее изменение с двухсторонним атрибутом привязки данных ('='
).
Другими словами: я не хочу, чтобы $watch
активировал значение, если изменение было внутренним (т. Е. Переменная области была изменена в контроллере или в функции связи).
Вот код, который иллюстрирует мою проблему:
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);
}
}
})
Живая демонстрация: http://jsfiddle.net/B7hT5/11/
Любая идея, кого я могу отличить?
Спасибо ... Я думал, что есть простое и элегантное решение этой проблемы ... – cheziHoyzer