ng-класс не делает того, что делает простой класс css

Я ожидал, что ng-класс, по крайней мере, сделает то, что делает простой класс, то есть применит свойство css. В примере с плунжером, если заменить ng-class на class, это сработает, и я получу отступ. то есть ng-class="indentLeft" не работает, а class="indentLeft" работает. Что мне не хватает?

См. простой планкер здесь: http://plnkr.co/edit/moLu0BmgEYVm3xFQDcw8?p=preview


person Kaya Toast    schedule 19.04.2014    source источник
comment
Если вам нужно class, то зачем вам ng-class   -  person Lucius    schedule 19.04.2014
comment
На самом деле мне нужно делать более сложные вещи с ng-class, но если я спотыкаюсь на первом шаге, это не очень приятно. Я свел свою проблему к этому простому вопросу.   -  person Kaya Toast    schedule 19.04.2014


Ответы (1)


ngClass требует выражения для оценки.

ng-class="{'indentLeft' : (item == true)}"

Структура json - это имя свойства в '' - это класс, который вы хотите применить, и это значение свойства отменяется, если его следует применять через true/false

Строковое выражение

Когда вы делаете это, ng-class="indentLeft" angularjs не знает, что это строка, и, скорее всего, пытается оценить ее из области видимости.

Если вы оберните свойство в '' и сделаете его строковым литералом, плункер должен работать правильно

ng-class="\'indentLeft\'"

Обновленный plnkr

person Mark Coleman    schedule 19.04.2014
comment
Пожалуйста. уточните, почему вы думаете, что это нуждается в выражении. В документации говорится, что один из трех способов его работы: если выражение оценивается как строка, строка должна быть одним или несколькими именами классов, разделенными пробелами. Я имею в виду, разве ng-class=indentLeft не является адекватным выражением само по себе? - person Kaya Toast; 19.04.2014
comment
Это не так, поскольку indentLeft, скорее всего, рассматривается как неизвестное свойство области видимости. Если вы сделаете 'indentLeft', теперь это строка, и angular работает правильно - person Mark Coleman; 19.04.2014