angular - 初始化表单后,Angular Reactive表单设置具有禁用属性的值
问题描述
我创建了一个表格。
HTML 代码:
<form [formGroup]="form">
<input formControlName="name"/>
<input formControlName="description"/>
<input formControlName="category"/>
<input formControlName="type"/>
</form>
下面是初始化表单的代码,将初始值设置为空:
form: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.initForm();
}
private initForm() {
this.form = this.fb.group({
name: ['', Validators.required],
description: [''],
category: ['', Validators.required],
type: ['', Validators.required],
});
}
在某些情况下,表单需要填写从 API 接收的数据。收到数据后,将执行以下代码:
// data received from API
if(data){
this.form = this.fb.group({
name: [{value: data.name, disabled: true}],
description: [{value: data.description, disabled: true}],
category: [{value: data.category, disabled: true}],
type: [{value: data.type, disabled: true}]
});
}
在上述情况下,值会正确更新,但控件不会被禁用。
我也试过setValue:
this.form.setValue({
name: {value: data.name, disabled: true},
description: {value: data.description, disabled: true},
category: {value: data.category, disabled: true},
type: {value: data.type, disabled: true}
});
在上述情况下,值用 [object Object] 填充。
如何同时设置字段值和设置禁用属性?
解决方案
为什么不直接setValue
禁用整个表单?
this.form.setValue(data);
this.form.disable();
推荐阅读
- rust - 理解 Rust 函数参数类型声明
- raspberry-pi - WSO2 IOT 服务器与代理断开连接
- c++ - cpp中的结构中的运算符重载
- mysql - MySQL Server 8.0 远程数据库
- c# - C# 将对象序列化为 JSON 但保留名称
- angular - 从打字稿中的指定位置将元素添加到数组
- vuetify.js - 当我在浏览器上运行此代码时,工具栏出现在底部我怎样才能使它在浏览器顶部
- php - PHP - Foreach 变量
- python - Python拆分并从文本文件中查找特定字符串
- regex - 如何将 YouTube 的喜欢和不喜欢以及 YouTube 中的比率导入 Google 表格?