Я надеюсь, что кто-нибудь сможет мне это объяснить. Почему %ngIf, как и все остальное, всегда дает отрицательный результат, если только я не делаю что-то совершенно неправильно.
Это сценарий: У меня есть значок, если длина массива> = 0, цвет фона станет розовым. в противном случае цвет фона значка будет белым.
Независимо от того, как я меняю сценарий, он все равно становится истинным. Я удалил массив и значок по-прежнему оставался сплошным розовым. Я добавил else, он выберет другое, даже если *ngIf истинно. Итак, не уверен, что здесь происходит.
Вот некоторые из вещей, которые я пробовал
<span *ngIf = "wishitems.length >=0" class = "fas fa-heart float-right" aria-
hidden = "true"></span>
<span *ngIf = "wishitems.length >=0" class = "fas fa-heart float-right" aria-
hidden = "true" ngIfElse = "wishitems.length == -1" class = "far fa-heart float-left"
aria-hide = "true"></span>
<span *ngIf = "wishitems.length >=0" class = "fas fa-heart float-right" aria-
hidden = "true"></span>
<span *ngIf = "wishItems.length <0" class = "far fa-heart float-right" aria-
hide = "true"></span>
Я помню, как где-то читал, что *ngIf не любит отрицательные числа. Любая помощь в было бы здорово указать мне правильное направление! Заранее спасибо.
ngIfElse не имеет никакого эффекта, в Angular нет такой директивы, это просто какой-то случайный атрибут в HTML. Кроме того, я рекомендую вам пройти базовое руководство по массивам JavaScript. Похоже, у вас серьезные заблуждения. Например, length массива никогда не бывает отрицательным.
@user2280852 user2280852, пожалуйста, поделитесь стекблицем с воспроизведенной проблемой! Стартер stackblitz



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш первый *ngIf работает, если wishitems является массивом.
Чтобы проверить, что происходит, замените willitems на такой массив чисел:
wishitems: Array<number> = [1];
И ваш HTML для:
<span *ngIf = "wishitems.length >=0" aria-hidden = "true">Test</span>
Затем вы начнете видеть Test в своем браузере.
Я хочу поблагодарить всех за их усилия, направленные на то, чтобы я встал на правильный путь. Ответ Рафи - это принятый ответ, который работает для меня. uKn помог мне протестировать мой массив и выяснить, почему он пуст. Я не мог выбрать оба ответа в качестве принятых. . Спасибо за ваши подробные объяснения, я немного отвлекся от индекса и длины. Я очень ценю вашу помощь, она работает, как и ожидалось! Я тщательно протестировал это
Реструктурируйте свой *ngIf, чтобы он также обрабатывал часть отрицания. В настоящее время рассматривается сценарий правды. Кроме того, убедитесь, что правильное условие также используется для оценки в шаблоне.
См. код ниже:
<ng-template #elseTemplate>
<span class = "far fa-heart float-right" aria-hidden = "true"></span>
</ng-template>
<span *ngIf = "wishitems.length > 0; else elseTemplate" class = "fas fa-heart float-right" aria-hidden = "true"></span>
Я понимаю ваше замешательство по поводу директивы *ngIf в Angular.
Проблема с длиной массива:
Длина массива всегда является неотрицательным целым числом. Это может быть 0 (для пустого массива) или любое положительное целое число. Оно никогда не может быть отрицательным. Это означает, что wishitems.length >= 0 всегда будет верно для любого массива, даже пустого.
Правильное использование *ngIf и else:
Синтаксис, который вы используете для условия else, неверен. В Angular вы используете ссылку на шаблон для части else.
Вот правильный способ реализовать то, чего вы пытаетесь достичь:
<ng-container *ngIf = "wishitems.length > 0; else emptyWishlist">
<span class = "fas fa-heart float-right" aria-hidden = "true"></span>
</ng-container>
<ng-template #emptyWishlist>
<span class = "far fa-heart float-right" aria-hidden = "true"></span>
</ng-template>
Этот код делает следующее:
wishitems.length > 0 (это означает, что в списке желаний есть товары), отображается значок сплошного сердечка.wishitems.length равен 0 (что означает, что список желаний пуст), отображается контурный значок сердечка.Если вы хотите изменить цвет фона вместо изменения значка, вы можете использовать [ngClass] или [style.background-color]:
<span class = "fa-heart float-right"
[ngClass] = "{'fas': wishitems.length > 0, 'far': wishitems.length === 0}"
[style.background-color] = "wishitems.length > 0 ? 'pink' : 'white'"
aria-hidden = "true"></span>
Этот подход использует один <span> и меняет его класс и цвет фона в зависимости от длины wishitems.
Помнить:
length >= 0 всегда истинно.length > 0, чтобы проверить, есть ли в массиве элементы.length === 0, чтобы проверить, пуст ли массив.Хотите, чтобы я объяснил какую-либо часть этого решения более подробно?
Начните с вывода значения willitems.length, затем выведите willitems.length >= 0. Возможно, вы поймете это оттуда. ngif, который является правдой, НЕ достигнет другого.