Angularjs - вложенный глобальный индекс ng-repeat
У меня есть следующий шаблон:
<div data-ng-repeat="supplier in order.Suppliers" data-ng-init="supplierIndex = $index">
<div data-ng-repeat="group in supplier.Groups">
{{something}}
</div>
</div>
И модель:
$scope.order = {
Suppliers: [
{
Groups: [{ id: 'sss'}, {id: 'ddd'}]
},
{
Groups: [{ id: 'qqqq'}, {id: 'www'}, {id: 'xxx'}]
},
{
Groups: [{ id: 'ooo'}]
}
]
}
Мне нужно отобразить глобальный групповой индекс, поэтому вывод должен быть таким:
0 1 2 3 4 5
Я знаю, что могу использовать функцию, которая вычисляет индекс по переданному идентификатору группы в каждом месте, где нам нужно отобразить глобальный групповой индекс, но как достичь этой цели наиболее изящно?
4 ответа
Если сделано только в HTML:
<div data-ng-init="$parent.index = 0" data-ng-repeat="supplier in order.Suppliers">
<div data-ng-repeat="group in supplier.Groups">
<span data-ng-init="index=$parent.$parent.index;$parent.$parent.index = $parent.$parent.index + 1;">
{{index}}
</span>
</div>
</div>
Ты можешь использовать {{$index}}
чтобы показать групповой индекс в вашем списке.
Ваши варианты:
$parent.$index
- положить индекс поставщика внутри объекта поставщика
- создать компонент
<supplier-info supplier="supplier" index="$index">
Вы можете объединять подобные группы в своем контроллере.
$scope.mergedGroups = [];
for(var i=0; i < $scope.order.Suppliers.length; i++){
for(var k=0; k < $scope.order.Suppliers[i].Groups.length; k++){
$scope.mergedGroups.push($scope.order.Suppliers[i].Groups[k]);
}
}
тогда вы можете использовать один ng-repeat и все готово.
<div data-ng-repeat="group in mergedGroups" >
{{group}} {{$index}}
</div>