Использование переменной в условной реализации ngClass

Я разработал приложение Angular 2, в котором я пытаюсь применить класс CSS, используя ngClass. Я сохранил имя класса в переменной className и попытался применить следующий код:

  1. Первый способ

    [ngClass]={'{{className}}': expression}
    
  2. Второй способ

    [ngClass]= {className: expression}
    

Но ни один из них не работал.


person Jayakrishnan    schedule 29.12.2016    source источник
comment
Что такое expression? Он должен вернуть true   -  person Günter Zöchbauer    schedule 29.12.2016
comment
Возможный дубликат Как использовать динамическое значение с ngClass   -  person jonrsharpe    schedule 29.12.2016
comment
О нет, это Angular 1, извините; версия вопроса Angular 2: stackoverflow.com/q/37090877/3001761   -  person jonrsharpe    schedule 29.12.2016
comment
@K.Daniek Я пытаюсь создать собственный элемент, который принимает имя класса, используя '@Input'.   -  person Jayakrishnan    schedule 29.12.2016
comment
@JayakrishnanGounder, чувак, ты должен принять одно из приведенных ниже, иначе люди просто скопируют и вставят наш ответ и ответят снова :D:D:D:D:   -  person Milad    schedule 29.12.2016


Ответы (4)


обновить

[ngClass]="expression ? cssClass : null"

или просто

[ngClass]="cssClass"

Пример планкера

оригинал (работает только в Dart)

[ngClass]= {className: expression}

будет работать нормально, когда expression вернет true

person Günter Zöchbauer    schedule 29.12.2016
comment
Я думаю, что className должно быть здесь переменным, вот в чем вопрос - person Milad; 29.12.2016
comment
Я только что проверил. Это работает только в Dart, но не в JS. - person Günter Zöchbauer; 29.12.2016
comment
Почему это все равно сработает? что, если я добавляю имя класса или что-то в этом роде? Это никогда не должно работать - person Milad; 29.12.2016
comment
Я не понимаю вашего комментария. Они реализовали это так же, как литералы объектов работают в TS и Dart. На самом деле в Dart это не литерал объекта, а Map. TS может иметь только строку в качестве имени свойства, но Dart может иметь любое значение в качестве ключа карты. - person Günter Zöchbauer; 29.12.2016
comment
[ngClass]=выражение? cssClass : null у меня сработало! - person Jayakrishnan; 29.12.2016

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

Шаблон

<!-- From a getter -->
[ngClass]="myClass"

<!-- From a function -->
[ngClass]="myClass(someCondition)"

Контроллер

// As a getter
get myClass(): any {

    return {
        someClass: someTruthyCondition
    }
}

// From a function
myClass(someCondition): any {

    return {
         someClass: someCondition === true
    }
}
person borislemke    schedule 29.12.2016

Попробуйте код ниже, он работает для меня.

Назначить класс переменной:

class1: string = "class1";
class2: string = "class2";

Стиль:

<style>
.class2 {
    height:50px;
    background-color:red;
    color:white;
    width:100px;            
}
 .class1 {
    height:50px;
    background-color:blue;
    color:white;
    width:100px;
}
</style>

HTML:

<div [ngClass]="1==1?class1:class2">
    Test Class
</div>

Код средства разработки:

введите здесь описание изображения

Вывод:

введите здесь описание изображения

person Sandip - Frontend Developer    schedule 29.12.2016

Вы должны использовать интерполяцию следующим образом:

<div  class="{{expression?className:null}}" ></div>

Это пример:

<div  class="{{something===anotherThing?className:null}}" ></div>
person Milad    schedule 29.12.2016
comment
Это не работает в Safari Mobile AFAIK, поэтому привязка к class не рекомендуется. - person Günter Zöchbauer; 29.12.2016
comment
@GünterZöchbauer, о, какой позор, знаешь почему? - person Milad; 29.12.2016
comment
Ошибка браузера. . . .. . . - person Günter Zöchbauer; 29.12.2016
comment
@GünterZöchbauer, есть ли какие-либо проблемы или это где-то задокументировано? Откуда нам это знать ? - person Milad; 29.12.2016
comment
Насколько я знаю, это обсуждалось в выпуске GitHub несколько месяцев назад, но я не смог его найти. - person Günter Zöchbauer; 29.12.2016
comment
@GünterZöchbauer Только что проверил в мобильном Safari, у меня все работает нормально, у меня Iphone6 ​​ios.10 - person Milad; 29.12.2016
comment
Спасибо за проверку. Возможно, с тех пор это было исправлено в браузере или полифилл был улучшен. - person Günter Zöchbauer; 29.12.2016