我在这里设置了一个小小提琴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
答案 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。