Angular Почему ngIf всегда отрицает значение True

Я надеюсь, что кто-нибудь сможет мне это объяснить. Почему %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 не любит отрицательные числа. Любая помощь в было бы здорово указать мне правильное направление! Заранее спасибо.

Начните с вывода значения willitems.length, затем выведите willitems.length >= 0. Возможно, вы поймете это оттуда. ngif, который является правдой, НЕ достигнет другого.

ukn 16.07.2024 04:58
ngIfElse не имеет никакого эффекта, в Angular нет такой директивы, это просто какой-то случайный атрибут в HTML. Кроме того, я рекомендую вам пройти базовое руководство по массивам JavaScript. Похоже, у вас серьезные заблуждения. Например, length массива никогда не бывает отрицательным.
JSON Derulo 16.07.2024 08:29

@user2280852 user2280852, пожалуйста, поделитесь стекблицем с воспроизведенной проблемой! Стартер stackblitz

Naren Murali 16.07.2024 08:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ваш первый *ngIf работает, если wishitems является массивом.

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

wishitems: Array<number> = [1];

И ваш HTML для:

<span *ngIf = "wishitems.length >=0" aria-hidden = "true">Test</span>

Затем вы начнете видеть Test в своем браузере.

Я хочу поблагодарить всех за их усилия, направленные на то, чтобы я встал на правильный путь. Ответ Рафи - это принятый ответ, который работает для меня. uKn помог мне протестировать мой массив и выяснить, почему он пуст. Я не мог выбрать оба ответа в качестве принятых. . Спасибо за ваши подробные объяснения, я немного отвлекся от индекса и длины. Я очень ценю вашу помощь, она работает, как и ожидалось! Я тщательно протестировал это

user2280852 17.07.2024 05:37

Реструктурируйте свой *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.

  1. Проблема с длиной массива: Длина массива всегда является неотрицательным целым числом. Это может быть 0 (для пустого массива) или любое положительное целое число. Оно никогда не может быть отрицательным. Это означает, что wishitems.length >= 0 всегда будет верно для любого массива, даже пустого.

  2. Правильное использование *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, чтобы проверить, пуст ли массив.

Хотите, чтобы я объяснил какую-либо часть этого решения более подробно?

Другие вопросы по теме