考虑一个服务中的以下函数:
$scope.addPeriod = function(newPeriod) {
if(newPeriod.from !== '' && newPeriod.until !== '') {
var index = $scope.newPeriods.indexOf(newPeriod);
$scope.newPeriods.splice(index, 1);
$scope.setHolidayEditions(newPeriod);
console.log("Check period");
console.log(newPeriod); // state 1: object newPeriod is as expected, it contains holidayEdtions
console.log("Check period copy");
console.log(angular.copy(newPeriod)); //state 2 : object newPeriod is missing the holidayeditions!
$scope.periods.push(angular.copy(newPeriod)); //original code
//some more logic irrelevant to the question
}
}
问题出在angular.copy()函数上。新的newPeriod对象结构如下:
它有一个“from”日期和一个“until”日期,以及一个杂志对象数组。然后有一个名为$scope.setHolidayEditions(newPeriod)的函数。基本上,它向每个杂志添加了一组版本对象。这个函数是有效的。我知道这是因为控制台输出。在原始代码中,期间随后被推入一个期间数组中,然后在屏幕上显示。很可能是为了避免引用问题,进行了angular.copy()操作。
但是,angular.copy()似乎没有复制杂志对象中新建的版本数组。这是为什么呢?
基本上,服务函数中发生了以下情况:
我有一个名为newPeriod的对象,大致如下:
{
from:"02/10/2015",
until:"09/10/2015",
magazines: [
{title:"some title", number:"some number", code:"magazineCode"},
{title:"other title", number:"other number", code:"magazineCode2"}
]
}
在执行函数$scope.setHolidayEditions(newPeriod)之后,该对象的样子如下:
{
from:"02/10/2015",
until:"09/10/2015",
magazines: [
{title:"some title", number:"some number", code:"magazineCode", holidayEditions:["date","date","date"]},
{title:"other title", number:"other number", code:"magazineCode2", holidayEditions:["date","date","date"]}
]
}
但在 angular.copy(newPeriod) 之后,对象再次变成了这样:
{
from:"02/10/2015",
until:"09/10/2015",
magazines: [
{title:"some title", number:"some number", code:"magazineCode"},
{title:"other title", number:"other number", code:"magazineCode2"}
]
}
angular.copy()没有复制杂志的holidayEditions数组。我想知道为什么?