【发布时间】:2015-10-02 12:47:17
【问题描述】:
考虑服务中的以下函数:
$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 对象的结构如下:
它有一个“开始”日期和一个“截止”日期以及一系列杂志对象。然后是函数$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 数组。我想知道为什么?
【问题讨论】:
-
请提供更多上下文。
-
显示的代码中没有任何不规则的地方会出现这样的问题。创建复制此的演示
-
我必须在家里做这件事,因为我应该继续我的 sprint 工作。我不能仅仅出于明显的原因复制公司代码:-)。
标签: javascript arrays angularjs