Angularjs 为什么在替换阵列时,与服务阵列的作用域绑定不会更新
我有一个作用域绑定到存储在服务中的数组。 当数组更改时,作用域会注意到更改并更新我的模板中的值 但是,当数组被另一个数组替换时,作用域似乎无法识别更改,并且不会更新列表 我知道这是angularjs的一种常见行为,可能是有意这样做的,但我不明白为什么。 在我的理解中,只要绑定引用发生更改,scope变量就应该更新 IsAngularjs 为什么在替换阵列时,与服务阵列的作用域绑定不会更新,angularjs,data-binding,angularjs-scope,Angularjs,Data Binding,Angularjs Scope,我有一个作用域绑定到存储在服务中的数组。 当数组更改时,作用域会注意到更改并更新我的模板中的值 但是,当数组被另一个数组替换时,作用域似乎无法识别更改,并且不会更新列表 我知道这是angularjs的一种常见行为,可能是有意这样做的,但我不明白为什么。 在我的理解中,只要绑定引用发生更改,scope变量就应该更新 Is$scope.myVar=anyOtherVar不等同于$scope.$watch('anyOtherVar',函数(..){//update myVar}) 看我的小提琴演示这个
$scope.myVar=anyOtherVar代码>不等同于$scope.$watch('anyOtherVar',函数(..){//update myVar})代码>
看我的小提琴演示这个问题。
以及相应的模板:
<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>
新元素()
replaceWholeArray()
- {{el.name}
您正在更新变量,但这不会更新使用原始变量进行的任何其他变量分配
因此,myService.anyArray
简单例子
var a = 1;
var b = a;
a = 2;
alert(b);// is still 1 due to value of `a` when it was assigned
相反,只需更新factory对象属性,但要做到这一点,需要首先存储对返回对象的引用
myApp.factory('myService', function() {
var anyArray = [...];
var anyOtherArray = [...];
var factoryObject = {
anyArray: anyArray,
newElement: function() {
anyArray.push({"name": "bob"});
},
replaceWholeArray: function() {
// change this part
//anyArray = anyOtherArray;
// To:
factoryObject.anyArray = anyOtherArray;
}
}
return factoryObject
});
问题本身应包含所有相关代码。问题必须是独立的。演示仅用于支持问题中的内容OK,这是有道理的。因此,一般来说,$scope.any=anyOther
绑定不会为anyOther
注册观察程序?它与观察程序无关,与中断对返回服务中原始数组集的引用有关。参见我添加的简单示例,watcher
是指angularjs如何处理双向绑定,以及何时检查绑定引用的更改。但我似乎必须深入挖掘主题性是javascript的一个基本问题。我不能看一个坏掉的参考
myApp.factory('myService', function() {
var anyArray = [...];
var anyOtherArray = [...];
var factoryObject = {
anyArray: anyArray,
newElement: function() {
anyArray.push({"name": "bob"});
},
replaceWholeArray: function() {
// change this part
//anyArray = anyOtherArray;
// To:
factoryObject.anyArray = anyOtherArray;
}
}
return factoryObject
});