AngularJS как динамически разделить список на несколько столбцов

у меня есть несколько элементов li, которые я хочу равномерно распределить по 3 различным столбцам. Поэтому мне нужно, чтобы 1-я треть элементов списка была показана в первом ul,следующая треть во 2-м ul и т. д.

право знать, что мой подход несколько статичен:

<ul class="small-12 medium-4 columns">
  <li ng-repeat="skill in skills.development | slice:0:10">
    {{ skill.name }}
  </li>
</ul>
<ul class="small-12 medium-4 columns">
  <li ng-repeat="skill in skills.development | slice:10:21">
    {{ skill.name }}
  </li>
</ul>
<ul class="small-12 medium-4 columns">
  <li ng-repeat="skill in skills.development | slice:21:32">
    {{ skill.name }}
  </li>
</ul>

Я создаю 3 строки в моем шаблоне, а затем я создал пользовательский фильтр, который разрезает список, чтобы я мог получить первые 11 элементов, следующие 11 элементов и так далее. Проблема в том, что количество строк в каждый ul не назначается динамически так:

Math.ceil(skills.development.length / 3)

поэтому, если у меня больше элементов, мне придется вручную изменить количество строк. Фильтрация также является проблемой. Представьте, что я ищу слово с 5 совпадениями в первом столбце и один во втором столбце. Тогда у меня были бы совершенно неровные размеры колонн. Длина должна быть пересчитана динамически, когда я фильтрую список.

в идеале не только число строк в столбце, вычисляется динамически, но и количество столбцов. Поэтому, если есть более 15 элементов, он должен отображать три столбца, но если есть только 10 элементов, 2 столбца будут выглядеть лучше (так как в каждом есть только 5 элементов). И если есть менее 5 элементов, будет отображаться только один столбец.

Я решил, что я должен либо попытаться решить его в представлении, либо сделать какую-то вспомогательную функцию, подобную пользовательской функции фильтра, которую я уже написал. Но как это сделать?

1 ответов


создайте массив столбцов с начальными и конечными значениями для каждого столбца и используйте вложенный ретранслятор для циклического отображения всех данных.

<ul ng-repeat="column in columns" class="small-12 medium-4 columns">
  <li ng-repeat="skill in skills | slice:column.start:column.end">
    {{ skill }}
  </li>
</ul>

полный plnkr здесь:http://plnkr.co/edit/AMWLvB045UJmNamp8vdz?p=preview