通过attr进行角度属性绑定。使用@Attribute时导致空值

时间:2018-10-01 08:19:39

标签: html angular binding attributes

如果我在模板中使用这样的角度分量:

<my-cmp selectable />

我的组件在其构造函数中要求以下内容:

constructor(@Attribute("selectable") selectable: string){};

然后selectable将是一个空字符串,如预期的那样,但是按如下方式使用时:

<my-cmp [attr.selectable]="true" />

这会将属性正确放置到DOM中的我的标签上,并导致以下结果:

<my-cmp selectable="true" />

但是在这种情况下,selectable始终具有null值,无论它是在construct还是ngOnInit上并且是给定值(例如{{1 }},“”或其他任何内容也会导致false)。

这里的问题是:为什么? 更重要的是:如何以最佳方式使用angular属性中的布尔属性?

注意:在这种情况下,我明确不想使用属性绑定,给定的“输入”应该是静态的。

1 个答案:

答案 0 :(得分:0)

您可以了解有关@Attribute装饰器here的内部信息:

  

Angular在运行时不读取属性值,仅在   编译时,否则会导致性能下降。

使用<my-cmp [attr.selectable]="true" />语法,您正在创建绑定。但是属性值将在第一个更改检测周期之后设置。因此,在编译时将没有设置属性,因此将获得null值。