我在网址http://plnkr.co/wbVjBfpAA9WTpjEAs1GJ
下的Plunkr上做了一个非常小的代码我首先定义一个数组对象,我在一个页面上显示ng-repeat。没问题
然后在每个项目上我添加一个编辑按钮并在ng-click
上启动一个功能现在,我将选定的数组项复制到一个新的$ scope.contractDetail中,并在编辑部分显示(作为输入)。
令我惊讶的是,当我开始编辑输入字段中的文本时,不仅$ scope.contractDetail对象得到更新,而且还有父$ scope.contracts。
我想在编辑后将我的$ scontractDetail对象专门分配回给定索引处的$ scope.contracts对象。
有人可以向我解释这里发生的事情
非常感谢
答案 0 :(得分:0)
从plunkr复制代码以显示:
angular.module('plunker', [])
.controller('MainCtrl', function($scope){
$scope.contracts = [{title: 'Master License Agreement'},{title: 'Limited Use Agreement'},{title: 'NDA'}];
$scope.editContract = function(indx){
$scope.contractDetail = $scope.contracts[indx];
}
})
JavaScript中的对象基本上是通过引用传递的,所以当你设置:
时$scope.contractDetail = $scope.contracts[indx];
这两个对象是同一个对象。当你开始编辑它时,Android的脏检查选择了它并显示另一个点的变化。
如果要创建要编辑的副本(对于编辑+保存/取消方案),可以使用angular.copy(obj)
创建不是同一对象的副本。