各選択を個別にレンダリングする代替バージョンを次に示します。カスタムを使用しています groupBy
フィルター(使用 アンダースコア):
app.filter('groupBy', ['$parse', function ($parse) {
return function groupByFilter(input, groupByExpr) {
return _.groupBy(input, $parse(groupByExpr));
};
}]);
と:
<div ng-repeat="(categoryTypeName, categories) in groupedCategories track by categoryTypeName">
<label>{{categoryTypeName}}</label>
<select
ng-model="selected[categoryTypeName]"
ng-options="c as c.name for c in categories track by c.id"
multiple
></select>
</div>
残念ながら、データが変更されたときにフィルターを適用する必要があります。
$scope.$watchCollection('categories', function (categories) {
$scope.groupedCategories = groupByFilter(categories, 'categoryType.name');
});
で使用される場合 ng-repeat
直接角度はanについて不平を言います Infinite $ DIGESTループ.
デモ: http://plnkr.co/edit/ipfvfh3pbloyk1u4n3la?p=preview
一方、要件を考えると、JSONが必要な方法で既に構成されている場合、それははるかに簡単になります(子育てのリストを備えたカテゴリタイプ、逆ではありません)。
元の答え:
私はあなたの最終レイアウトを本当に想像することはできませんが、簡単な出発点は group by
の機能 ng-options
.
例えば:
<select
ng-model="selected"
ng-options="c as c.name group by c.categoryType.name for c in categories track by c.id"
></select>