Angular 6 @HostBinding('class')和@HostBinding('attr.class')有什么区别

时间:2018-12-10 16:18:58

标签: angular angular2-hostbinding

我正在检查Angular 6项目的源代码,并看到@HostBinding('class')@HostBinding('attr.class')的用法。我将其中一种实现从@HostBinding('class')更改为@HostBinding('attr.class'),但没有注意到渲染结果有任何差异。两者之间有什么区别?我何时应该选择一种实现而不是另一种实现?

2 个答案:

答案 0 :(得分:1)

我认为两者在使用方式上没有任何有意义的区别,但是在概念层面上有一个区别:使用'class'可以使用元素的类定义,而{{ 1}}采用名为“ class”的属性的值。

通过仅使用不带属性的'attr.class',然后可以将特定的类绑定到布尔值,如下所示:

'class'

然后,假设HostBinding是在名为@HostBinding('class.blue') @Input() blue: boolean; 的指令中定义的,则可以使用以下HTML:

my-directive

这将导致div中包含<div my-directive [blue]="true"></my-directive>

对于您应该使用的情况,这并不重要。我会简单地选择class="blue",因为它更短,但是在那种情况下,实际上并不重要。

答案 1 :(得分:1)

@HostBinding('class')@HostBinding('attr.class')具有相同的净效果,并且使用其中任何一个都会产生相同的结果。 @HostBinding可用于绑定到主机元素上的任何类,属性或属性。 您使用哪种语法将取决于您要执行的操作。

如果您尝试动态更改data-属性,则需要使用@HostBinding('attr.data-special')

如果要更改元素的禁用状态,则可以使用@HostBinding('disabled')

您还可以使用@HostBinding('class.myClass')绑定到各个类,或绑定@HostBinding('style.color')之类的内联样式。