原始对象更改时绑定不会更新 [英] Binding doesn't update when the original object changes

查看:36
本文介绍了原始对象更改时绑定不会更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想我对数据绑定和作用域在 Angular 中的工作方式有一些误解,或者我对 Javascript 有一些误解.我希望有人可以帮助我.

假设我有一个工厂,它有一个对象,并为它定义了一个 getter/setter:

app.factory('myFactory', function(){变量我的对象:{子对象:{子属性:'值'}};返回 {获取对象:函数(){返回我的对象​​;},设置对象:函数(对象){我的对象 = 对象;}};};

然后,在控制器中我得到这个对象并将子对象分配给作用域:

app.controller('myController', function($scope, myFactory){var myObject = myFactory.getObject();$scope.subObject = myObject.subObject;});

在视图中,我绑定到该对象的子属性:

{{subObject.subProperty}} </div>

然后,有人调用 myFactoy.setObject() 方法并将工厂中的原始对象替换为一个新对象.我的绑定不应该自动更新吗??如果不应该......这是实现这一目标的最佳方式??

解决方案

原始对象没有改变.您只是更改了对它的引用.

<小时>

改用这个:

setObject : function(obj) {angular.copy(obj, myObject);}

I think I have misunderstood something about how data-binding and scopes work in Angular, or maybe I have some misconception in Javascript in general. I hope somebody can help me.

Let's say I have a factory that has an object, and defines a getter/setter for it:

app.factory('myFactory', function(){

    var myObject : {

        subObject : {

             subProperty : 'value'
        }
    };

    return {

        getObject : function() {

            return myObject;
        },

        setObject : function(obj) {

            myObject = obj;
        }
    };
};

Then, in a controller I get this object and assign the subObject to the scope:

app.controller('myController', function($scope, myFactory){

    var myObject = myFactory.getObject();

    $scope.subObject = myObject.subObject;
});

In the view, I bind to the subProperty of that object:

<div> {{subObject.subProperty}} </div>

Then, somebody calls the myFactoy.setObject() method and replaces the original object in the factory for a new one. Shouldn't my binding be updated automatically?? if it shouldn't... which is the best way to accomplish this??

解决方案

The original object doesn't change. You're just changing the reference to it.


Use this instead:

setObject : function(obj) {

    angular.copy(obj, myObject);
}

这篇关于原始对象更改时绑定不会更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆