Ich versuche, zwischen interner Änderung und einer externen Änderung mit einem bidirektionalen datengebundenen Attribut ('='
) zu unterscheiden.
Mit anderen Worten: Ich möchte $watch
nicht auf den Wert auslösen, wenn die Änderung intern war (d. H. Die Bereichsvariable wurde in der Steuerung oder in der Link-Funktion geändert).
Hier einige Code, der mein Problem zeigt:
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/
Irgendeine Idee wer kann ich unterscheiden?
Danke ... Ich dachte, es gibt eine einfache und elegante Lösung für dieses Problem ... – cheziHoyzer