Множественные условия в ngClass - Угловые 4
Как использовать несколько условий для ngClass? Пример:
<section [ngClass]="[menu1 ? 'class1' : '' || menu2 ? 'class1' : '' || (something && (menu1 || menu2)) ? 'class2' : '']">
что-то вроде этого. У меня такой же класс для 2 меню, и мне нужен класс, когда одно из этих меню истинно, а "что-то" верно. Надеюсь, я достаточно хорошо объяснил
Ответы
Ответ 1
Вы пытаетесь присвоить массив ngClass, но синтаксис для элементов массива неверен, поскольку вы разделяете их на ||
вместо ,
.
Попробуй это:
<section [ngClass]="[menu1 ? 'class1' : '', menu2 ? 'class1' : '', (something && (menu1 || menu2)) ? 'class2' : '']">
Это также должно работать:
<section [ngClass.class1]="menu1 || menu2" [ngClass.class2] = "(menu1 || menu2) && something">
Ответ 2
вам нужна объектная нотация
<section [ngClass]="{'class1':condition1, 'class2': condition2, 'class3':condition3}" >
ref: https://angular.io/api/common/NgClass
Ответ 3
Существует несколько способов написания такой же логики. Как упоминалось ранее, вы можете использовать объектную нотацию или просто выражение. Однако, я думаю, вы не должны так много логики в HTML. Трудно проверить и найти проблему. Вы можете использовать функцию getter для назначения класса.
Например;
public getCustomCss() {
//Logic here;
if(this.x == this.y){
return 'class1'
}
if(this.x == this.z){
return 'class2'
}
}
<!-- HTML -->
<div [ngClass]="getCustomCss()"> Some prop</div>
//OR
get customCss() {
//Logic here;
if(this.x == this.y){
return 'class1'
}
if(this.x == this.z){
return 'class2'
}
}
<!-- HTML -->
<div [ngClass]="customCss"> Some prop</div>
Ответ 4
<section [ngClass]="{'class1':expression1, 'class2': expression2,
'class3':expression3}">
Не забудьте добавить одинарные кавычки вокруг имен классов.
Ответ 5
У меня была такая же проблема. Я хотел установить класс после просмотра нескольких выражений. ngClass может оценить метод внутри кода компонента и рассказать вам, что делать.
Итак, внутри * ngFor:
<div [ngClass]="{'shrink': shouldShrink(a.category1, a.category2), 'showAll': section == 'allwork' }">{{a.listing}}</div>
И внутри компонента:
section = 'allwork';
shouldShrink(cat1, cat2) {
return this.section === cat1 || this.section === cat2 ? false : true;
}
Здесь мне нужно вычислить, должен ли я сжимать div на основе того, соответствует ли две разные категории выбранным категориям. И это работает. Поэтому оттуда вы можете вычислить true/false для [ngClass] на основе того, что ваш метод возвращает с учетом ввода.
Ответ 6
<a [ngClass]="{'class1':array.status === 'active','class2':array.status === 'idle','class3':array.status === 'inactive',}">
Ответ 7
Я хочу упомянуть некоторые важные, которые нужно иметь в виду при реализации связывания классов.
[ngClass] = "{
'badge-secondary': somevariable === value1,
'badge-success': somevariable === value1,
'badge-danger': somevariable === value1,
'badge-warning': somevariable === value1,
'badge-warning': somevariable === value1,
'badge-success': somevariable === value1 }"
класс здесь не является обязательным, потому что должно быть выполнено одно условие, в то время как у вас есть два идентичных класса 'badge-warning', которые могут иметь два разных условия, чтобы исправить это
[ngClass] = "{
'badge-secondary': somevariable === value1,
'badge-success': somevariable === value1,
'badge-danger': somevariable === value1,
'badge-warning': somevariable === value1 || somevariable === value1,
'badge-success': somevariable === value1 }"
Ответ 8
Я надеюсь, что это один из основных условных классов
Решение: 1
<section [ngClass]="(condition)? 'class1 class2 ... classN' : 'another class1 ... classN' ">
Решение 2
<section [ngClass]="(condition)? 'class1 class2 ... classN' : '(condition)? 'class1 class2 ... classN':'another class' ">