サンプル データセットを仮定すると、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;
}
}
デモ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
。