varios que programacion page ejemplos controladores change javascript angularjs

javascript - que - Copia profunda de objetos en angular



que es angular en programacion (3)

Me pregunto si es posible evitar copiar referencias a objetos cuando necesite crear un objeto simple que tenga una matriz de objetos incrustados. La situación es la siguiente: Tengo un servidor que acepta un JSON y aplica un poco de lógica luego almacena el objeto en DB. digamos que mi formulario es para guardar equipos en DB. El servidor acepta el equipo como json. el equipo tiene una variedad de objetos de TeamMember, mi formulario tiene un campo simple para ingresar la información del miembro del equipo y agregarlo a la matriz Team teamsMembers. Ahora aquí está el problema, cuando agrego un miembro del equipo a la lista de arreglos y quiero agregar otro miembro del equipo cuando escribo en el campo, también se cambia el miembro agregado. Sé el motivo

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

y es porque puse la misma referencia en la matriz teamMembers, así que he agregado el mismo objeto varias veces. para evitar esto, debería crear un nuevo objeto de miembro de equipo, copiar todas las propiedades teamMember y agregarlo a la matriz.

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



Su pregunta dice que quiere "evitar una copia profunda", pero no estoy seguro de que sea precisa. Parece que solo quieres usar angular.copy , porque necesitas crear una copia del miembro del equipo y agregar eso a la matriz:

$scope.addTeamMember = function(teamMember) { var newTeamMember = angular.copy(teamMember); $scope.team.teamMembers.push(newTeamMember); };


Yo personalmente uso esto:

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);