У меня есть таблица материалов, в которой в зависимости от содержимого ячейки мне нужно использовать определенный класс CSS.

Я использую следующие классы css
.status-code{
flex: 0 0 10% !important;
width: 10% !important;
}
.status-code-succsess{
flex: 0 0 10% !important;
width: 10% !important;
background: rgb(196,214,160);
color: rgb(80,99,42);
}
.status-code-failed{
flex: 0 0 10% !important;
width: 10% !important;
background: rgb(229,185,181);
color: rgb(97,38,33);
}
.status-code-empty{
flex: 0 0 10% !important;
width: 10% !important;
background: rgb(216,216,216);
}
Вот html
<ng-container matColumnDef = "Warehouse">
<mat-header-cell class = "status-code" *matHeaderCellDef> Warehouse </mat-header-cell>
<mat-cell class = "{{row.warehouse}} == 'Success' ? status-code-success : ({{row.warehouse}} == 'Failed' ? status-code-failed : status-code-empty)" *matCellDef = "let row"> {{row.warehouse}} </mat-cell>
</ng-container>
<ng-container matColumnDef = "DPI">
<mat-header-cell class = "status-code" *matHeaderCellDef> DPI </mat-header-cell>
<mat-cell class = "{{row.dpi}} == 'Success' ? status-code-success : ({{row.dpi}} == 'Failed' ? status-code-failed : status-code-empty)" *matCellDef = "let row"> {{row.dpi}} </mat-cell>
</ng-container>
Однако у меня есть только одна строка данных с «Успехом» в ячейке «Склад», но она придает мне стиль с розовым фоном.
Помогите, что может быть не так?
Спасибо, но когда я использую этот <mat-cell ng-class = "row.warehouse == 'Успех'? Код состояния-успеха: (row.warehouse == 'Ошибка'? Код состояния-сбой: код состояния -empty)" *matCellDef = "let row"> {{row.warehouse}} </mat-cell> стиль вообще не применяется ((






Попробуйте это с помощью [ngClass].
Возможно, вам придется внести следующие изменения при использовании ngClass:
*. Удалить интерполяцию {} по каждой переменной
*. Включить все class names в single quotes.
<ng-container matColumnDef = "Warehouse">
<mat-header-cell class = "status-code" *matHeaderCellDef> Warehouse </mat-header-cell>
<mat-cell [ngClass] = "row.warehouse == 'Success' ? 'status-code-success' : (row.warehouse == 'Failed' ? 'status-code-failed' : 'status-code-empty')"
*matCellDef = "let row"> {{row.warehouse}} </mat-cell>
</ng-container>
<ng-container matColumnDef = "DPI">
<mat-header-cell class = "status-code" *matHeaderCellDef> DPI </mat-header-cell>
<mat-cell [ngClass] = "row.dpi == 'Success' ? 'status-code-success' : (row.dpi == 'Failed' ? 'status-code-failed' : 'status-code-empty')"
*matCellDef = "let row"> {{row.dpi}} </mat-cell>
</ng-container>
Также у вас есть опечатка в имени класса.
Изменить .status-code-succsess как .status-code-success
.status-code-success{
flex: 0 0 10% !important;
width: 10% !important;
background: rgb(196,214,160);
color: rgb(80,99,42);
}
Да, спасибо, действительно опечатка. Однако ничего не изменилось.. Он по-прежнему работает некорректно. Розовый фон повсюду
Попробуйте использовать ngClass. Уберите интерполяцию и включите все class names в single quotes. Проверить обновленный ответ
Да, с [ngClass] все работает отлично! Большое Вам спасибо
Кстати, может у вас есть идея, как сделать эти статусы со слегка закругленными углами и с отступом, как на 1-й картинке? Изменение стиля на .status-code-success{ flex: 0 0 10% !important; ширина: 10% !важно; фон: rgb(196 214 160); цвет: RGB(80,99,42); поля: 5px 5px 5px 5px; } дает это поле остальным ячейкам, что неприемлемо
Попробуйте что-то вроде border-radius: 20px для этого
Я реализовал такое же решение, но что, если я хочу переместить логику ngClass в файл ts, вызовите его в html.
Попробуйте использовать [ngClass] вместо класса, а также не нужно использовать скобки "{}" для записи row.warehouse. Вы можете написать это как <mat-cell [ngClass] = "row.warehouse...">