原始对象更改时,绑定不会更新。复制是唯一/最好的解决方案吗?



我遇到了和这里一样的问题。

当原始对象发生变化时,绑定不会更新。

我想就如何处理这个问题征求更多的意见。

我认为这是一个非常普遍的问题。几乎所有的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;
});

最新更新