51

埋め込みオブジェクトの配列を持つ単純なオブジェクトを作成する必要があるときに、オブジェクトへの参照をコピーしないようにする方法はあるのでしょうか。状況は次のとおりです。JSON を受け入れ、いくつかのロジックを適用してオブジェクトを格納するサーバーがあります。 DB。私のフォームがチームをDBに保存するためのものだとしましょう。サーバーは team を 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 に答える