Ich habe einen Gültigkeitsbereich, der an ein Array gebunden ist, das in einem Service gespeichert ist. Wenn sich das Array ändert, bemerkt der Bereich die Änderung und aktualisiert die Werte in meiner Vorlage.Warum wird meine Gültigkeitsbereichsbindung an ein Service-Array nicht aktualisiert, wenn das Array ersetzt wird
Wenn das Array jedoch durch ein anderes Array ersetzt wird, scheint der Bereich keine Änderung zu erkennen und aktualisiert die Liste nicht.
Ich weiß, dass dies ein gemeinsames Verhalten von angularjs ist und dass es wahrscheinlich so sein soll, aber ich verstehe nicht warum. In meinem Verständnis sollte die Scope-Variable immer dann aktualisiert werden, wenn sich der gebundene Verweis ändert.
Ist $scope.myVar = anyOtherVar;
nicht äquivalent zu $scope.$watch('anyOtherVar',function(..){//update myVar});
?
Sehen Sie meine Geige, um das Problem zu demonstrieren. http://jsfiddle.net/sL9k7q9L/1/
var myApp = angular.module('myApp',[]);
//myApp.directive('myDirective', function() {});
myApp.factory('myService', function() {
var anyArray = [{"name":"peter"}];
var anyOtherArray = [{"name":"laura"}];
return {
anyArray: anyArray,
newElement: function(){
anyArray.push({"name":"bob"});
},
replaceWholeArray: function(){
anyArray = anyOtherArray;
console.log(anyArray);
}
}
});
function MyCtrl($scope,myService) {
$scope.elements = myService.anyArray;
$scope.newElement = function(){
myService.newElement();
}
$scope.replaceWholeArray = function(){
myService.replaceWholeArray();
}
}
und die entsprechende Vorlage:
<div ng-controller="MyCtrl">
<button ng-click="newElement()">
newElement()
</button>
<button ng-click="replaceWholeArray()">
replaceWholeArray()
</button>
<ul>
<li ng-repeat="el in elements">{{el.name}}</li>
</ul>
</div>
Alle relevanten Code sollte in der Frage selbst enthalten sein. Fragen müssen in sich geschlossen sein. Demos werden nur benutzt um zu unterstützen, was eigentlich in der Frage steht – charlietfl