Pho Huynh
Pho Huynh

Reputation: 1577

Angular 2 [attr.class] overwrites native DOM classes

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

Answers (2)

Pho Huynh
Pho Huynh

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

Rishabh Jain
Rishabh Jain

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

Related Questions