我遇到了和这里一样的问题。
当原始对象发生变化时,绑定不会更新。
我想就如何处理这个问题征求更多的意见。
我认为这是一个非常普遍的问题。几乎所有的ajax请求在spa的返回json是用来创建js对象。创建新的引用来指向这些对象,并且/或者更新现有的引用来指向这些新对象。
从新对象复制对象属性到现有对象是唯一/最好的解决方案吗?如果对象是一个大集合或具有深度图,该怎么办?看来复制不太管用。有没有办法监控/观看参考?
我想错了吗?
根据请求,我已经设置了一个jsfiddle来模拟这个问题。
https://jsfiddle.net/ho69ofog/ var newObject = {
"subObject": {
"subProperty": Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5)
}
};
myObject = newObject;
注意,只有当整个工厂对象附加到作用域时,才会更新作用域值。如前所述,当原始对象发生变化时,绑定不会更新,复制对象而不是创建新对象(在updateTimer函数中)将导致所有作用域值更新。
这不是唯一的解决方案,但它是最简单的解决方案之一。这是另一个。在控制器中使用$watch来检测对象何时发生变化。
$scope.$watch(function(){
return myFactory.getObject();
},
function(newValue){
$scope.subObject = angular.isDefined(newValue) ? newValue.subObject : undefined;
});