我有一组对象,我认为这称为关联数组。无论如何,我想在该列表中找到一个项目并进行更新。作为旁注,这个集合是选择的ng模型。我知道lodash有一些这类功能。我可以找到该项目,但我不确定更新项目的最佳方法是什么,因此数据绑定仍适用于我的选择。
这是一个不起作用的例子:
for (x = 0; x < $scope.RulesTemplates.length; x++)
{
if($scope.RulesTemplates[x].Name == $scope.TempRules.Name)
{
$scope.RulesTemplates[x] = $scope.TempRules;
}
}
答案 0 :(得分:2)
假设有一个样本数据集,如果要扩展绑定到ng-options的数组中的现有对象,首先需要确保该角度具有由特定唯一属性跟踪的数组项。然后您可以在相应位置更新数组中的新项目,angular将自动在绑定选择选项中执行更新(无需重新呈现其他选项值)。但是这种方法可能无法刷新已绑定的ng-model。
使用传统循环的另一种简单方法: -
<select ng-options="item.display for item in items" ng-model="selected"></select>
您的更新逻辑可以是: -
for (x = 0, l = $scope.items.length; x < l; x++){
var item = $scope.items[x];
if(item.name == itemsUpdate.name) {
angular.extend(item,itemsUpdate); //Extend it
break;
}
}
<强> Demo1 强>
或者因为您使用的是lodash
,所以代码行可能更少: -
var item = _.first($scope.items, {name:itemsUpdate.name}).pop(); //Get the item add necessary null checks
angular.extend(item, itemsUpdate);
<强> Demo2 强>
angular.extend
将确保基础源对象引用与更新属性保持一致,您也可以使用lodash merge
。
答案 1 :(得分:1)
尝试这样的事情:
angular.forEach($scope.RulesTemplates, function(value, key){
if(value.Name == $scope.TempRules.Name){
value = $scope.TempRules;
}
})