サービスに格納されている配列にスコープバインディングがあります。 配列が変更されると、スコープは変更を認識し、テンプレート内の値を更新します。配列が置換されたときにサービス配列へのスコープバインディングが更新されない理由
しかし、配列が別の配列に置き換えられると、スコープは変更を認識していないように見え、リストを更新しません。
私はこれがangularjsの一般的な振る舞いであり、これはおそらくこのように意図されていることを知っていますが、私は理由を知りません。 私の理解では、範囲参照が変更されるたびにスコープ変数が更新されるはずです。
$scope.myVar = anyOtherVar;
は$scope.$watch('anyOtherVar',function(..){//update myVar});
と等価ではありませんか?
問題を示すために私のフィドルを見てください。 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();
}
}
と対応するテンプレート:
<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>
すべての関連コードは質問自体に含める必要があります。質問は自己完結型である必要があります。デモは質問に実際にあるものをサポートするためにのみ使用されます – charlietfl