angular - 反应式表单,在 ngOnChanges 不更改模板后禁用表单控制
问题描述
我正在 Angular 7 项目中使用响应式表单。在某些组件中,我有一个使用 FormBuilder 构建的表单,我需要根据输入属性禁用或启用一些控件。
这个输入属性是在父组件中从异步请求中获取的,当它的值改变时,我改变了“禁用”状态,但是模板并没有按预期改变:disabled
属性没有设置在对应的<input>
.
这是我的代码:
@Input() myInputProperty;
form: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnChanges(changes: SimpleChanges) {
if (changes['myInputProperty']) {
this.buildForm();
}
}
private buildForm() {
this.form = this.fb.group({
myControl: {value: myInputProperty && myInputPropery.stuff, disabled: !!myInputProperty}
});
}
我们在 buildForm() 方法中进行了两次,一次myInputProperty
未设置,一次myInputProperty
已请求;第二次禁用控件但未更新模板后,该disabled
属性设置在<input>
.
我试过了,this.form.get('myControl').disable()
但效果不好。
如果我添加一些代码,例如
if (this.myInputProperty) {
setTimeout(() => {
this.form.get('myControl').disable();
});
}
最后buildForm()
,它可以工作,但它不是一个令人满意的解决方法。
编辑:stackblitz 示例: https ://stackblitz.com/edit/angular-rkurxt?file=src%2Fapp%2Fhello.component.ts
解决方案
推荐阅读
- java - 使用 webdriver(selenium) 通过 onclick() 事件调用页面
- variables - 在 JMeter $__timeshift 中使用变量
- c# - 使用 C# 从数据表中删除重复项
- javascript - Safari 在加载本地 js 模块时抛出 CORS 错误
- jenkins - Jenkins“基于角色的授权策略”插件与 OIDC - 如何配置项目角色?
- python - 无法在 python 中使用 matplotlib 和 cartopy 绘制轮廓子图
- javascript - 使用 callable 从客户端调用 express 函数
- sql - 优化插入查询
- c - 如何在 C 中反转 int 数组?
- azure - 将文件从 Azure VM 复制到 Azure Blob 存储