Reputation: 1577
I have a variable holding my class name string:
classNameB = "class-B";
I want to add this class name to a native DOM element via [attr.class]
:
<div class="class-A" [attr.class]='classNameB'></div>
Then, angular overwrites the current DOM class class-A
. What has left after element created is something like:
<div class="class-B"></div>
What am I doing wrong here and how to work around on this?
PS: Can I use [ngClass]
instead and how?
Upvotes: 5
Views: 6440
Reputation: 1577
So I went through some funny situations where I almost ran out of options. Most of the time, I use [ngClass]
and it was fine until:
<div class='native-class' [ngClass]='classNameHolder' [ngClass]='{"some-class": isSomeClass}'>
where,
classNameHolder: string = 'class-name-1';
isSomeClass: boolean = true;
I was stuck until I find good use of ngClass
:
<div class='native-class' ngClass='{{classNameHolder}} {{isSomeClass ? "some-class" : ""}}></div>
And that's it. This is final option that I've been using from then. Hope it'll help if anyone runs into the same sitation.
Upvotes: 4
Reputation: 97
[attr.class]='classNameB'
here the classNameB should be $scope attached variable. which can be an expression or value. you can also modify the code like this
[attr.class]='{{getClassName()}}'
for ng-class attribute it works same for both. or you can have a class on boolean basis
[attr.class]="'ifThis'?'classNameB':'classNameA'"
or
ng-class="varA==0 ?'classNameB':'classNameA'"
Upvotes: 0