$ scope的范围

时间:2014-06-25 14:49:15

标签: angularjs scope

我在网址http://plnkr.co/wbVjBfpAA9WTpjEAs1GJ

下的Plunkr上做了一个非常小的代码

我首先定义一个数组对象,我在一个页面上显示ng-repeat。没问题

然后在每个项目上我添加一个编辑按钮并在ng-click

上启动一个功能

现在,我将选定的数组项复制到一个新的$ scope.contractDetail中,并在编辑部分显示(作为输入)。

令我惊讶的是,当我开始编辑输入字段中的文本时,不仅$ scope.contractDetail对象得到更新,而且还有父$ scope.contracts。

我想在编辑后将我的$ scontractDetail对象专门分配回给定索引处的$ scope.contracts对象。

有人可以向我解释这里发生的事情

非常感谢

1 个答案:

答案 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)创建不是同一对象的副本。