我试图回答别人的问题。在尝试回答的过程中,我意识到自己对一些事情存在相当多的不确定性。
我希望有人可以就以下编号为1..4的问题提供反馈:
任务:根据条件将输入字段设置为只读
HTML 的相关部分:
<input type="text" placeholder="Club Name" #clubName>
将此添加到 TypeScript 组件中。
// class properties
@ViewChild('clubName')
inp:HTMLInputElement; // Could also use interface Element
// conditionally set in some other methods of class
inp.setAttribute('readonly', 'readonly');
inp.removeAttribute('readonly');
我必须说这对我来说是一个灰色地带。
- 在Angular 2+中,直接使用
@ViewChild
引用HTMLInputElement
或Element
是否是不好的实践?我经常看到示例使用ElementRef
或从ElementRef
链接到nativeElement
。
由于VS Studio没有针对它们的智能感知,所以我突然感觉自己像在黑暗中编码。例如,您永远无法获得有关方法setAttribute或removeAttribute及其参数要求等的反馈。(我知道也可以使用类型转换)
- 然后,在查看文档后,我怀疑您可以直接在HTML模板中对输入执行此操作:
<input [attr.readonly]= "isReadOnly">
据我所知,使用Typescript时需要通过一个属性获取器来实现这个功能:
get isReadOnly() :boolean {
}
这种方式有效吗?
- 我在想,你能否在HTML模板中使用方法语法:
<input [attr.readonly]= "isReadOnly()">
类型脚本
isReadOnly() :boolean {
}
这种方法有效吗?
4. 总之,什么是最好的方法?
更新:还有一个 *ngIF,因此您可以输出具有相同名称的两个输入元素中的一个。但对我来说,这听起来像是杀鸡焉用牛刀。
2&3
,取决于我需要计算什么来确定布尔值。 - Zze