在Angularjs中没有$ scope的范围对象不会更改

时间:2013-09-04 09:26:02

标签: javascript angularjs angularjs-scope

我在这里设置了一个小小提琴http://jsfiddle.net/SPMfT/137/,我想知道是否有人可以解释为什么更改对象不起作用,同时更改对象的属性或使用“$ scope更改对象“在前面工作。

原因是我试图避免在控制器功能中使用范围,因此它们更容易测试。

我的真正任务是     ng-click =“reset(current,master)” 与

$scope.reset = function (current, master) { angular.copy(current, master); }

这不起作用,而这有效:

$scope.reset = function (current, master) { angular.copy($scope.current, master); }

这两个     $ scope.current 和     $ scope.master 存在

干杯

更新

我的问题是我没有更新对象本身。要解决这个问题,请使用例如

angular.extend(data, { name: 'change', game:'change' });

angular.copy({ name: 'change', game:'change' }, data);//Pay attention to order

1 个答案:

答案 0 :(得分:7)

原因是您正在创建一个新对象(因此也是一个不同的引用),并将其分配给以前指向到同一对象的局部变量。

$scope.change = function (data) {
    data = { name: 'change', game:'change' };
}

传递的data变量包含对$scope.data的同一对象的引用,但是您正在指定一个 local 变量,该变量指向对象A的引用到新的对象B,本地。此时,$scope.data仍然保留对之前相同对象的引用。您所做的只是更改对局部变量的引用,并在函数末尾将其丢弃。

在您的具体情况下,它应该有效(使用current$scope.current)。我相信您正在反映angular.copy中的参数,因为它应该是(source, destination)。有关简单演示,请参阅此updated fiddle