Глубокое копирование объектов в угловой?
интересно, есть ли возможность избежать копирования ссылок на объекты, когда вам нужно создать простой объект, который имеет массив встроенных объектов.Ситуация выглядит следующим образом: у меня есть сервер, который принимает JSON и применяет некоторую логику, а затем сохраняет объект в БД. допустим, моя форма предназначена для сохранения команд в БД. Сервер принимает команду как json. команда имеет массив объектов TeamMember, моя форма имеет простое поле для ввода информации о члене команды и добавления его в массив Team 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*/
}
3 ответа:
Ваш вопрос говорит, что вы хотите "избежать глубокого копирования", но я не уверен, что это точный. Похоже, вы просто хотите использовать угловое.копировать, потому что вам нужно создать копию члена команды и добавить ее в массив:
$scope.addTeamMember = function(teamMember) { var newTeamMember = angular.copy(teamMember); $scope.team.teamMembers.push(newTeamMember); };
Это самая лучшая документация
https://docs.angularjs.org/api/ng/function/angular.copy
есть живой пример, а на странице, которая является само иллюстративным.