2016-09-20 2 views
0

Предположим, у меня есть объект model.data и вы хотите скопировать этот объект в datacopy и внесите изменения в этот новый объект (datacopy). Но когда я меняю datacopy, изменения также применяются к model.data. Как это остановить?angular.copy() не нарушает ссылки на модель

function updateClone (_object) { 
    var datacopy = angular.copy(model.data); 
    var index = _.findIndex(datacopy, function (obj) { 
          return obj.id === _object.id; 
         }); 

    datacopy.splice(index, 1, _object); 
    } 
+1

Не могли бы вы поделиться содержимое 'model'? –

ответ

1

Из-за репутации я не могу ответить на вопрос.

Angular.copy() отлично работает.

Вы можете попробовать этот вариант: экземпляр объекта вне функции и отправить его как параметр.

function updateClone (datacopy, _object) 
{ 
    var index = _.findIndex(datacopy, function (obj) { 
           return obj.id === _object.id; 
          }); 

    datacopy.splice(index, 1, _object); 
} 
1

Я уверен, что angular.copy работает нормально.

Я верю, что модель хранит ссылки на некоторые другие объекты. Когда вы angular.copy(model.data) данные копируются с вложенными ссылками: http://jsfiddle.net/pxcf2dqw/2/

var toy = { 
    price: 50 
} 

var model = { 
    data: toy 
} 

var datacopy = angular.copy(model.data); 
datacopy.price = 50 

console.log(datacopy.price) 
console.log(model.data.price) 
Смежные вопросы