Создать строку каждый после двух элементов в Angular ng-repeat - Ionic Grid
Мне нужно создать strcuture, как показано ниже в моем приложении, через ng-repeat.
<div class="row">
<div class="col-50">1</div>
<div class="col-50">2</div>
</div>
<div class="row">
<div class="col-50">3</div>
<div class="col-50">4</div>
</div>
Сейчас мой код выглядит следующим образом:
<div class="row">
<label class="item item-radio col col-50" ng-repeat="a in question.answer">
<input type="radio" name="answers" class="a-{{ a.correct }}" value="{{ a.correct }}" ng-click='ansValue("{{ a.correct }}")'>
<div class="item-content">
<img src="img/ans/{{ a.option }}" />
</div>
<i class="radio-icon ion-checkmark"></i>
</label>
</div>
Но в приведенном выше коде есть только один тег строки, который у меня есть. Я бы не хотел, чтобы тег строки содержал/обертывал каждые 2 элемента в цикле. Каков наилучший способ достичь этого?
Ссылка: Ionic Grid Doc
Ответы
Ответ 1
Мне удалось сделать это с помощью $even
.
<div ng-repeat="number in numbers">
<div class="row" ng-if="$even">
<div class="col col-50">{{numbers[$index]}}</div>
<div class="col col-50">{{numbers[$index + 1]}}</div>
</div>
</div>
Вот рабочий JSFiddle.
Ответ 2
Решение от @Patrick Reck отлично, но оно заставляет вас дважды повторять код,
Я предлагаю это улучшение:
<div ng-repeat="number in numbers">
<div class="row" ng-if="$even">
<div class="col col-50"
ng-repeat="num in [numbers[$index],numbers[$index + 1]]">
{{num}}
</div>
</div>
</div>
таким образом вы будете писать свой код один раз, как если бы он был нормальным ng-repeat
Ответ 3
Вы можете добавить flex-wrap: wrap to class row
http://jsfiddle.net/0momap0n/99/
<div ng-controller="MyCtrl">
<div class="row" style="flex-wrap: wrap">
<div class="col col-50" ng-repeat="number in numbers">{{number}}</div>
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.numbers = [1, 2, 3, 4, 5, 6];
}
Ответ 4
Я бы написал это так, вы можете увеличить $index % 3
, чтобы соответствовать количеству столбцов, которые вы хотели бы, это создаст 3 столбца...
<div class="row">
<div class="" ng-repeat="i in range(1, 9)">
<div class="clearfix" ng-if="$index % 3 == 0"></div>
<div class="col">
<h1>{{ i }}</h1>
</div>
</div>
</div>
Ответ 5
Это решение использует гибкий поток и прекрасно его решает:
CSS
.container {
display: flex;
flex-flow: row wrap;
}
.item {
width: 50%;
}
HTML
<div class="container">
<div class="item" *ngFor="let number of numbers">
{{number}}
</div>