【问题标题】:Angular 6 what is the difference between @HostBinding('class') and @HostBinding('attr.class')Angular 6 @HostBinding('class') 和 @HostBinding('attr.class') 有什么区别
【发布时间】:2018-12-10 16:18:57
【问题描述】:

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

【问题讨论】:

    标签: angular angular2-hostbinding


    【解决方案1】:

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

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

    @HostBinding('class.blue')
    @Input() blue: boolean;
    

    然后,假设 HostBinding 在名为 my-directive 的指令中定义,您可以使用以下 HTML:

    <div my-directive [blue]="true"></my-directive>
    

    这会导致一个包含class="blue"的div

    至于在你的情况下你应该使用哪一个,这并不重要。我会选择简单的class,因为它更短,但在这种情况下真的没关系。

    【讨论】:

      【解决方案2】:

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

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

      如果你想改变元素的禁用状态,那么你可以使用@HostBinding('disabled')

      您还可以使用@HostBinding('class.myClass') 绑定到单个类或绑定内联样式,例如@HostBinding('style.color')

      【讨论】:

        猜你喜欢
        • 2020-02-28
        • 2018-10-25
        • 1970-01-01
        • 2021-05-07
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        相关资源
        最近更新 更多