如何临时禁用Angular表单所有字段?求更优方案及原理解惑
临时禁用Angular表单所有字段的两种实现方式
这两种方式适用于模板驱动表单和响应式表单,因为二者均依赖FormGroup API。
使用formGroup.enable() 和 formGroup.disable()
模板代码
<form ngForm> <input ngModel name=name [disabled]=fieldIsDisabled() /> </form>
逻辑代码
this.ngForm.form.enable(); this.ngForm.form.disable();
若不是存在以下两个问题,我更倾向于使用该方案:
formGroup.enable()会忽略字段的[disabled]指令值,导致当其他控件要求字段保持禁用时,所有字段仍会被强制启用。- 若
[disabled]指令的值发生变化,表单字段不会受之前调用的enable()或disable()方法影响,可能导致字段在非预期情况下被启用。
我希望它能像下一种方案那样,通过控制变量实现:
全局状态变量控制所有字段
此处通过formIsDisabled信号控制整个表单的禁用状态,解决了上一方案的问题。
模板代码
<form ngForm> <input ngModel name=name [disabled]="formIsDisabled() || nameDisabled()"/> <input ngModel name=address [disabled]=formIsDisabled() /> </form>
该方案的缺点是必须为每个字段添加控制变量,显得冗余且易出错……但就我所知,这仍是相对最优的选择。
问题:是否存在更优的实现方式?formGroup.enable()和formGroup.disable()方法为何如此设计?
内容的提问来源于stack exchange,提问作者Tovar
相关产品推荐
相关产品推荐

