Reputation: 4302
Here are 2 different ways to use the ng-class
directive. I need them both, on the same element, but that doesn't work.
http://plnkr.co/edit/uZNK7I?p=preview
<div ng-repeat="item in [1, 2, 3, 4, 5]"
ng-class="{ first: $first, last: $last }">{{item}}</div>
correctly results in
<div class="first">1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div class="last">5</div>
http://plnkr.co/edit/tp6lgR?p=preview
<div ng-repeat="item in [1, 2, 3, 4, 5]"
ng-class=" 'count-' + ($index + 1) ">{{item}}</div>
correctly results in
<div class="count-1">1</div>
<div class="count-2">2</div>
<div class="count-3">3</div>
<div class="count-4">4</div>
<div class="count-5">5</div>
I need dynamic class names (like 'count-' + n
), but also need the object syntax for multiple classes.
I can't just use 2 ng-class
attributes (http://plnkr.co/edit/OLaYke?p=preview), only the first one works.
Any suggestions?
Upvotes: 20
Views: 24557
Reputation: 731
You should provide ngClass
with an array that contains both expression and object:
<div ng-class="['count-' + ($index + 1), { first: $first, last: $last }]">
Note:
The solution suggested in accepted answer (simultaneous usage of ngClass
directive and interpolation in class
attribute) is a bad practice. See more details here and here.
Upvotes: 8
Reputation: 13597
If you need to mix them together, just go for strings concat:
ng-class="'count-' + ($index+1) + ($first?' first':($last?' last':''))"
Or for a clearer view:
ng-class="'count-' + ($index+1) + ($first?' first':'') + ($last?' last':'')"
There aren't known pros for using class="{{exp}}"
instead of ng-class="exp"
, since both get updated when the value of exp
changes. On the contrary, going with the first one might cause page froze in some cases.
Upvotes: 2
Reputation: 50
I thing you can separate atributes ng-class
with ;
try:
ng-class=" 'count-' + ($index + 1) ; { first: $first, last: $last }"
Upvotes: 0
Reputation: 104795
You shouldn't be using ng-class
for the second one, use
<div class="count-{{$index + 1}}" ng-class="{ first: $first, last: $last }">
Upvotes: 20