I'm inspecting the source code of an Angular 6 project and saw the usage of both @HostBinding('class') and @HostBinding('attr.class'). I changed one of the implementations from @HostBinding('class') to @HostBinding('attr.class') and did not notice any difference in the rendered result. What are the differences between the two and when should I opt for one implementation over the other?
Angular 6 what is the difference between @HostBinding('class') and @HostBinding('attr.class')
1.9k Views Asked by KlavierCat At
2
There are 2 best solutions below
0
On
@HostBinding('class') & @HostBinding('attr.class') have the same net effect and using either of these will yield the same result.
@HostBinding can be used to bind to any class, property or attribute on a host element.
Which syntax you use will be determined by what you are trying to do.
If you are trying to dynamically change a data- attribute then you will need to use @HostBinding('attr.data-special').
If you are want to change the disabled state of the element then you would use @HostBinding('disabled').
You can also bind to individual classes using @HostBinding('class.myClass') or bind inline styles such as @HostBinding('style.color').
I don't think there is any meaningful difference between the two in the way you use it, but there is one difference on a conceptual level: using
'class'takes the class definition of the element, while'attr.class'takes the value of the attribute named "class".By using just
'class'without attribute, you can then bind specific classes to a boolean, like this:Then, assuming the HostBinding is defined in a directive called
my-directive, you can use this HTML:And it would result in a div that contains
class="blue"As for which one you should use in your case, it doesn't really matter. I would go with simply
classbecause it's shorter, but it really doesn't matter in that case.