1

我有一个对象集合,我认为这称为关联数组。无论如何,我想在该列表中找到一个项目并更新它。作为旁注,这个集合是一个选择的 ng-model。我知道 lodash 有一些这种类型的功能。我可以找到该项目,但我不确定更新项目的最佳方式是什么,因此数据绑定仍然适用于我的选择。

这是一个不起作用的示例:

for (x = 0; x < $scope.RulesTemplates.length; x++)
 {
   if($scope.RulesTemplates[x].Name == $scope.TempRules.Name)
   {
     $scope.RulesTemplates[x] = $scope.TempRules;
   }
 }
4

2 回答 2

2

假设有一个示例数据集,如果要扩展绑定到 ng-options 的数组中的现有对象,首先需要确保 angular 具有由特定唯一属性跟踪的数组项。然后您可以在相应位置更新数组中的新项目,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;
  }
}

演示1

或者由于您使用的是lodash,可能更少的代码行:-

var item = _.first($scope.items, {name:itemsUpdate.name}).pop(); //Get the item add necessary null checks
angular.extend(item, itemsUpdate);

演示2

angular.extend将确保基础源对象引用在更新属性时保持不变,您也可以使用 lodash merge

于 2014-10-15T23:53:35.747 回答
1

尝试这样的事情:

angular.forEach($scope.RulesTemplates, function(value, key){
    if(value.Name == $scope.TempRules.Name){
        value = $scope.TempRules;
    }
})

角度.forEach

于 2014-10-15T23:23:04.623 回答