Использование ng-класса в *ngFor для условного форматирования ячейки таблицы в Angular 11

Я заполняю содержимое таблицы, используя *ngFor для циклического просмотра содержимого массива.

Таблица заполняется просто отлично, но я хочу изменить фон ячейки на основе значения, которым она была заполнена (например, зеленый, если значение «пройдено», и красный, если значение «не пройдено».

Подход, который я использую, состоит в том, чтобы использовать ng-class для оценки содержимого значения элемента массива и использовать его для установки фона, но он не работает.

Компонент HTML

<tr *ngFor = "let e of list;">
        <td>{{ e.description}}</td>

        <td ng-class = "{'Pass' : {{e.status}} =='Pass', 'Fail' : {{e.status}} =='Fail'}">{{ e.status }}
        </td></tr>

Компонент CSS

.Pass {
 
  background-color: green;
}

.Fail {
  background-color: red;
}

Мог бы проверить [ngClass]

Justin Morrison 23.12.2020 14:18
ng-class для angularjs, а не для angular. Как уже упоминалось, используйте [ngClass].
R. Richards 23.12.2020 14:19
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
2
841
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение:

<tr *ngFor = "let e of list;">
        <td>{{e.description}}</td>
        <td [ngClass] = "{Pass: e.status === 'Pass', Fail: e.status === 'Fail'}">{{e.status}}
        </td>
        </tr>

Или, если статус может быть либо пройден, либо не пройден — мы можем проверить условие один раз с помощью тернарного оператора:

[ngClass] = "e.status=== 'Pass'? 'Pass' : 'Fail'"

Несколько вещей:

  • Классы CSS обычно не пишутся с заглавной буквы.
  • Вам не нужно интерполировать внутри ngClass.

    {'Pass' : {{e.status}} == 'Pass', 'Fail' : {{e.status}} == 'Fail'} <-- e.status not {{e.status}}

  • Я бы придерживался обычного [ngClass] (есть и другие способы применения динамического класса в Angular, но этот используется чаще всего).

Повлиял ли этот подход на производительность таблицы с более чем 1000 столбцов для оценки? Если да, то каков идеальный способ обработки подобных запросов

Sebastian 09.07.2021 11:59

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