3

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

1 回答 1

7

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

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

data传递的变量包含对您的同一个对象的引用,$scope.data但是您正在将一个指向对象 A 的引用的局部变量分配给一个新的对象 B, local。在这一点上,$scope.data仍然持有对它之前拥有的同一个对象的引用。您所做的只是更改对局部变量的引用并在函数结束时将其丢弃。

在您的特定情况下,它应该可以工作(使用currentor $scope.current)。我相信你正在反转参数,angular.copy因为它应该是(source, destination)。请参阅此更新的小提琴以获得简单的演示。

于 2013-09-04T10:12:43.040 回答