ng-repeat には現在、オブジェクト内で複雑な反復処理を行う方法がありません (Python で可能な方法)。ng-repeat のソース コードを調べて、一致する正規表現が次のとおりであることに注意してください。
(key, value) in collection
-そして、それらはキー配列にプッシュされ、値リストに割り当てられるため、悲しいことに複雑な ng-repeat を持つことはできません...
基本的に、ここで既に回答されている 2 種類のソリューションがあります。
- 最初の回答が示唆したように、ネストされた ng-repeat 。
- 2番目の回答が示唆するように、データオブジェクトを1 ng-repeatに合わせて再構築します。
ソートとコーディングのロジックをコントローラー内に保持し、HTML ドキュメントで処理しないようにするため、解決策 2 の方が優れていると思います。これにより、より複雑な並べ替え (つまり、価格、金額、widgetName、またはその他のロジックに基づく) も可能になります。
もう1つのこと-2番目のソリューションは、データセットの可能なメソッドを反復処理します( hasOwnPropertyがそこで使用されなかったため)。
angular.forEach を使用し、ソリューションがかなり単純であるが複雑なソート ロジックを可能にすることを示すために、このPlunker (finishmove Plunker に基づく) のソリューションを改善しました。
$scope.buildData = function() {
var returnArr = [];
angular.forEach($scope.data, function(productData, widget) {
angular.forEach(productData, function( amount, price) {
returnArr.push( {widgetName: widget, price:price, amount:amount});
});
});
//apply sorting logic here
return returnArr;
};
$scope.sortedData = $scope.buildData();
そして、コントローラーで:
<div ng-controller="MyCtrl">
<table>
<thead>
<tr>
<td>thing</td>
<td>price</td>
<td>amount</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in sortedData">
<td>{{ item.widgetName }}</td>
<td>{{ item.price|currency }}</td>
<td>{{ item.amount }} </td>
</tr>
</tbody>
</table>
</div>