Вызов повторения tr с ng-repeat
Я борюсь со специальным прецедентом. Я предоставляю вам снимок jsfiddle внизу.
1. Таблица HTML
Мой HTML - это таблица. Директива ng-repeat
должна применяться к элементу html. В моем случае использования это невозможно сделать, поскольку экземпляр ng-repeat состоит из двойного tr-элемента:
<!-- ng-repeat the following block n times -->
<tr>
<td>text</td>
</tr>
<tr>
<td tooltip="comment that is bound to the first tr">hover me</td>
</tr>
AngularJS не предоставляет синтаксический комментарий ng-repeat (в отличие от KnockoutJS). Я нашел похожие вопросы о SO. Однако прецедент состоял из добавления HTML внутри элемента. Шахта состояла бы в размещении нового tr после ng-повторного tr, но это просто не сработало. Кроме того, есть новые вещи, которые необходимо учитывать.
2. Директива Tooltip
Второй tr включает директиву всплывающей подсказки, взятую из angular -ui-bootstrap. Поэтому простой подход jQuery может оказаться невозможным.
3. МОЯ ЦЕЛЬ
Я предоставляю вам фрагмент кода, который вообще не использует ng-repeat. Моя цель - использовать ng-repeat для каждого элемента моей коллекции.
http://jsfiddle.net/RkCMr/1/
Ответы
Ответ 1
Вы можете использовать тег tbody для группировки нескольких tr вместе и использовать ngRepeat для его перебора.
http://jsfiddle.net/RkCMr/4/
<div ng-app="challenge">
<h3>how can I refactor it out using ng-repeat?</h3>
<table ng-controller="ctrl">
<thead></thead>
<tbody ng-repeat="item in collection">
<tr ng-click="showing=!showing">
<td>click</td>
<td>{{item}}</td>
</tr>
<tr ng-show="showing">
<td>--></td>
<td>comment {{item}}
<a tooltip="a tooltip comment {{item}}">
<i class="icon-ok-sign"></i>
</a>
</td>
</tr>
</tbody>
</table>
</div>
Кстати, похоже, что ваш код по-прежнему работает в JQuery. Даже вы поставили их в директиву. Как показано в приведенном выше примере, директива вообще не нужна, и JQuery не используется.
Ответ 2
Также возможно сделать это с помощью директив ng-repeat-start
и ng-repeat-end
:
<table>
<tr ng-repeat-start="item in items">
<td>first</td>
<td>row</td>
</tr>
<tr ng-repeat-end>
<td>second</td>
<td>row</td>
</tr>
</table>
По-моему, это намного лучше, чем повторять элемент tbody
.
Ответ 3
Вот решение для этого.
<div ng-app="challenge">
<h3>how can I refactor it out using ng-repeat?</h3>
<table ng-controller="ctrl">
<thead></thead>
<tbody ng-repeat="l in collection">
<tr ng-click="isRowCollapsed=!isRowCollapsed">
<td>click</td>
<td>{{l}}</td>
</tr>
<tr ng-hide="isRowCollapsed">
<td>--></td>
<td>comment {{l}}
<a tooltip="a tooltip comment {{l}}">
<i class="icon-ok-sign"></i>
</a>
</td>
</tr>
</tbody>
</table>
http://jsfiddle.net/RkCMr/7/