我正在设置$ scope。$使用以下代码监视具有嵌套项的数组:
$scope.$watch("networks",
function( newValue, oldValue ) {
if(JSON.stringify(oldValue)===JSON.stringify(newValue)){
return false;
}
else if(!(angular.isUndefinedOrNull(newValue) || angular.isUndefinedOrNull(oldValue))){
var oldValueCount = 0;
var validIndexArray=[];
var newValueCount = 0;
angular.forEach(newValue, function(item,i){
if(item.isSelected=='false'){
newValueCount++;
validIndexArray.push(i);
}
});
angular.forEach(oldValue, function(item,i){
if(item.isSelected=='false'){
oldValueCount++;
}
});
console.log("oldValueCount is"+oldValueCount);
$scope.netObject = {"keyid": "","value": "","actual":""};
if(oldValueCount==newValueCount===0){return false;}
if($rootScope.planBody.length!==0){
$rootScope.planBody.campaign.networks = [];
}
angular.forEach(validIndexArray, function(item,i){
$scope.netObject.keyid=newValue[item].keyid;
$scope.netObject.value=newValue[item].value;
$scope.netObject.actual=newValue[item].actual;
$rootScope.planBody.campaign.networks.push($scope.netObject);
});
}
},
true
);
$ rootScope.planBody.campaign.networks正在填充我在视图上更新的最后一个元素的副本。如果我选择4个项目,则第4个项目重复4次。
当我调试并进入最终功能时,
angular.forEach(validIndexArray, function(item,i){...});
我发现了一些奇怪的东西 - 经过一次迭代后,我将$ scope.netObject推入$ rootScope.planBody.campaign.networks,当我重新进入循环时,在第一行:
$scope.netObject.keyid=newValue[item].keyid;
推送项目ALREADY PUSHED INSIDE $ rootScope.planBody.campaign.networks使用新值进行更新。这导致重复。
答案 0 :(得分:1)
您正在更新现有(并已经推入数组)对象的属性 您需要在每次迭代中创建一个新的空对象:
angular.forEach(validIndexArray, function(item,i){
$scope.netObject = {};
...
});