У меня есть проблема с директивой ngIf. Я попробовал много способов решить эту проблему, но, к сожалению, не удалось.
У меня есть массив объектов с разными свойствами. Что-то вроде этого:
object = [
{
name: "1",
isNumber: true,
},
{
name: "2",
isNumber: true,
},
{
name: "3",
isNumber: true,
},
{
name: "4",
isNumber: true,
},
{
name: "5",
isNumber: true,
},
{
name: "#",
isNumber: false,
},
{
name: "*",
isNumber: false,
}
Мне нужно использовать ngIf для последнего объекта с истинным значением свойства isNumber. Я не знаю, сколько объектов с isNumber в true будет в моем массиве. Это может быть 7 или 82. Никто не знает. Также объекты с isNumber на false не всегда будут в моем массиве. Иногда массив будет иметь только объекты с isNumber на true и без объектов с isNumber на false.
Как я могу достичь этого, используя ngIf?
Заранее спасибо.
ОБНОВИТЬ:
У меня есть что-то вроде этого:
1, 2, 3, 4, 5, 6, 7, *, #.
И я не хочу иметь кнопку "Вниз" на последнем элементе с истинным значением свойства isNumber (в этом случае 7). Потому что, если пользователь переместит его, у меня будет следующее:
1, 2, 3, 4, 5, 6, *, 7, #.
И это будет неправильная логика.
Итак, мне нужно использовать ngIf, чтобы я мог отключить эту кнопку на этом элементе. Но иногда я могу иметь что-то вроде этого (без лишних символов):
1, 2, 3, 4, 5.
И в этой ситуации мне также не нужна кнопка "Вниз" на последнем элементе. Потому что невозможно переместить последний элемент вниз.
Если вы пытаетесь найти, если это последний элемент И, если isNumber
установлен в true, вы можете использовать это:
<span ng-repeat="item in items" ng-if="item.isNumber && $last">
$last
- специальная переменная, определенная через ngRepeat
, расположенную здесь. Поскольку ngIf
принимает логический оператор, вы можете использовать как логические &&
и ||
операторы.
Изменить: если вы не выполняете итерацию по ней с помощью ngRepeat
и вы просто хотите выбрать последний элемент, вы можете сделать что-то подобное, чтобы выбрать последнее, а затем использовать ngIf
для его отображения, если isNumber
установлено в true:
<span ng-bind="list[list.length - 1]" ng-if="list.isNumber">
Редактировать 2: Не могли бы вы "заглянуть" в следующий элемент и посмотреть, установлено ли следующее значение isNumber
false? Как это:
<span ng-repeat="...">
<span ng-if="!list[$index + 1].isNumber"></span>
</span>
Как и $last
, я использую специальную переменную $index
для перехода к следующему элементу ngRepeat
. (не уверен, что Angular автоматически проверяет ошибки вне очереди или если он выдает ошибку)
ng-repeat
-ing над массивом?
Ваш первоначальный вопрос был немного запутанным, но благодаря изменениям, я думаю, я понимаю, что вам нужно. Используя $index
в сочетании с $last
, вы можете добиться того, что хотите сделать простым способом:
<div ng-repeat="item in items">
{{item.name}}
<button ng-if="!$last && items[$index + 1].isNumber">Down</button>
</div>
объяснение
Условие отображения кнопки "Вниз": !$last && items[$index + 1].isNumber
. Действительно, мы должны показать кнопку, если:
!$last
следующий - номер: items[$index + 1].isNumber
Обратите внимание, что мы можем заглянуть в следующий элемент без ошибок, потому что раньше мы проверяли, что мы не на последнем элементе.
Смотрите демонстрационную скрипку
ng-if
проверил, является лиisNumber
истинным ИЛИ, если это последний элемент? Можете ли вы дать больше кода, а также ожидаемый результат?