Haw*_*awk 3 javascript angularjs angularjs-scope
我在这里设置了一个小小提琴http://jsfiddle.net/SPMfT/137/我想知道是否有人可以解释为什么更改对象不起作用,同时更改对象的属性或更改对象前面的作品中有"$ scope".
原因是我试图避免在控制器功能中使用范围,因此它们更容易测试.
我的真正任务是使用ng-click ="reset(current,master)"
$scope.reset = function (current, master) { angular.copy(current, master); }
Run Code Online (Sandbox Code Playgroud)
这不起作用,而这有效:
$scope.reset = function (current, master) { angular.copy($scope.current, master); }
Run Code Online (Sandbox Code Playgroud)
$ scope.current和$ scope.master都存在
干杯
更新:
我的问题是我没有更新对象本身.要解决问题,请使用例如
angular.extend(data, { name: 'change', game:'change' });
Run Code Online (Sandbox Code Playgroud)
要么
angular.copy({ name: 'change', game:'change' }, data);//Pay attention to order
Run Code Online (Sandbox Code Playgroud)
原因是您正在创建一个新对象(因此是一个不同的引用)并将其分配给以前指向同一对象的局部变量.
$scope.change = function (data) {
data = { name: 'change', game:'change' };
}
Run Code Online (Sandbox Code Playgroud)
在data传递变量保存到你的同一对象的引用$scope.data,但你分配一个局部变量指向的对象A的一个新对象B的引用,在本地.此时,$scope.data仍然保留对之前相同对象的引用.您所做的只是更改对局部变量的引用,并在函数末尾将其丢弃.
在您的具体情况下,它应该工作(使用current或$scope.current).我相信你是一个反相的参数angular.copy,因为它应该是(source, destination).有关简单演示,请参阅此更新的小提琴.