Подтвердить что ты не робот

Создать строку каждый после двух элементов в 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

4b9b3361

Ответ 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>