这是一个备用版本,单独渲染每个选择。它正在使用自定义 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
直接的角度会抱怨 无限$摘要循环.
演示: 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>