Angularjs $scope.$watch内的angular.forEach()行为怪异-吐出重复项
我正在设置$scope.$监视包含嵌套项的数组,代码如下:Angularjs $scope.$watch内的angular.forEach()行为怪异-吐出重复项,angularjs,foreach,apply,watch,digest,Angularjs,Foreach,Apply,Watch,Digest,我正在设置$scope.$监视包含嵌套项的数组,代码如下: $scope.$watch("networks", function( newValue, oldValue ) { if(JSON.stringify(oldValue)===JSON.stringify(newValue)){ return false; }
$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;
已在$rootScope.planBody.campaign.networks内推送的项目将使用新值更新。这是造成重复的原因
您正在更新现有(并已推送到数组中)对象的属性。
您需要在每次迭代中创建一个新的空对象:
angular.forEach(validIndexArray, function(item,i){
$scope.netObject = {};
...
});
非常感谢。最愚蠢的错误!我已经更改了初始化,现在可以工作了