#angularjs #switch-statement #angularjs-ng-repeat
#angularjs #оператор переключения #angularjs-ng-repeat
Вопрос:
Я пытаюсь выяснить, как я мог бы использовать ngSwitch с ngRepeatStart и End для двух строк таблицы, где вторая строка отображается только при нажатии на верхнюю.
Вот что у меня есть, и я хочу заставить работать (не работает):
<tr
data-ng-repeat-start="user in users | filter : { name: search, active: searchActive }"
data-ng-click="selectUser(user)"
data-ng-switch on="isSelected(user)">
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
<td>{{ user.active }}</td>
<td>{{ user.dob | date: 'EEEE, dd MMMM yyyy' }}</td>
</tr>
<tr data-ng-repeat-end data-ng-switch-when="true">
<td colspan="4">
{{ user.description }}
</td>
</tr>
и вот что работает:
<tbody
data-ng-repeat="user in users | filter : { name: search, active: searchActive }"
data-ng-click="selectUser(user)"
data-ng-switch on="isSelected(user)">
<tr>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
<td>{{ user.active }}</td>
<td>{{ user.dob | date: 'EEEE, dd MMMM yyyy' }}</td>
</tr>
<tr data-ng-switch-when="true">
<td colspan="4">
{{ user.description }}
</td>
</tr>
</tbody>
Я хотел бы избежать tbody
тега переноса и вместо этого использовать ngRepeatStart / End.
Есть ли способ изменить мой первый пример, чтобы заставить его работать?
Ответ №1:
Не используйте ng-switch, просто используйте ng-show или ng-if . Вот плунжер
Редактировать
Хорошо, я думаю, если вы действительно хотите, вы можете использовать ng-switch , хотя я бы посоветовал не делать этого, если все, что вы делаете, это проверка true / false . Вот обновленный плунжер. Хитрость в том, что коммутатор должен быть на втором <tr>
, а ng-switch — когда это необходимо, чтобы быть на <td>
.
Теперь, если вам нужно, чтобы каждый переключатель был строкой таблицы, тогда вам просто нужно будет использовать ng-if
. ng-switch
Атрибут должен быть родительским для всех ng-switch-when
‘s. Вот почему переключатель работает только тогда, когда вы его включаете <tbody>
или когда вы переключаете <td>
‘s.
Комментарии:
1. Спасибо, но есть ли способ сделать это с помощью ngSwitch, если у меня было более двух строк на итерацию?
2. Например, если бы ng-switch не был просто true или false? В том виде, в каком он есть сейчас, это ужасный вариант использования для ng-switch
3. Хотя я только что обновил этот плунжер для использования ng-switch
4. Это верно — для коммутатора может быть не только один случай.
5. Проблема со вторым плунжером, очевидно, заключается в том, что независимо от того, что мы получим пустые теги tr. Я думаю, что в этом случае мне придется придерживаться тега tbody. Спасибо