如果我在模板中使用这样的角度分量:
<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属性中的布尔属性?
注意:在这种情况下,我明确不想使用属性绑定,给定的“输入”应该是静态的。
答案 0 :(得分:0)
您可以了解有关@Attribute装饰器here的内部信息:
Angular在运行时不读取属性值,仅在 编译时,否则会导致性能下降。
使用<my-cmp [attr.selectable]="true" />
语法,您正在创建绑定。但是属性值将在第一个更改检测周期之后设置。因此,在编译时将没有设置属性,因此将获得null
值。