51

我想知道当您需要创建一个具有嵌入式对象数组的简单对象时,是否可以避免复制对对象的引用。情况如下:我有一个接受 JSON 并应用一些逻辑然后将对象存储在D B。假设我的表格用于在数据库中保存团队。服务器接受团队作为 json。团队有一个 TeamMember 对象数组,我的表单有一个简单的字段来输入团队成员信息并将其添加到团队 teamMembers 数组中。现在问题来了,当我将一个团队成员添加到数组列表中并想在我输入字段时添加另一个团队成员时,添加的成员也会更改!。我知道原因

$scope.addTeamMember=function(teamMember){
   $scope.team.teamMembers.push(teamMember);
}

这是因为我将相同的引用放入 teamMembers 数组中,所以我多次添加了相同的对象。为避免这种情况,我应该创建一个新的团队成员对象,复制所有 teamMember 属性并将其添加到数组中。

 $scope.addTeamMember=function(teamMember){
       var newTeamMember; /*<--- copy teamMember */
       $scope.team.teamMembers.push(newTeamMember); /*and add newTeamMember*/
    }
4

3 回答 3

116

你的问题说你想“避免深拷贝”,但我不确定这是否准确。听起来您只想使用angular.copy,因为您需要创建团队成员的副本并将其添加到数组中:

$scope.addTeamMember = function(teamMember) {
   var newTeamMember = angular.copy(teamMember);
   $scope.team.teamMembers.push(newTeamMember);
};
于 2013-01-16T14:21:20.517 回答
6

这是可用的最佳文档

https://docs.angularjs.org/api/ng/function/angular.copy

页面上还有一个活生生的例子,它是自我说明的。

于 2015-07-08T07:31:16.040 回答
0

我个人使用这个:

    function copyObjToObj(source, destination) {
        if(!angular.equals(source,destination)){
            if (!!destination) 
                angular.copy(source, destination);
            else 
                destination = angular.copy(source);
        }
        return destination;
    }
var destination = copyObjToObj(sourceObj, destination);
于 2016-03-19T06:55:21.163 回答