我已经尝试过这里的其他答案的例子,但我没有成功!
我创建了一个反应形式(即动态),我想在任何给定时间禁用某些字段.我的表格代码:
this.form = this._fb.group({
name: ['', Validators.required],
options: this._fb.array([])
});
const control = <FormArray>this.form.controls['options'];
control.push(this._fb.group({
value: ['']
}));
Run Code Online (Sandbox Code Playgroud)
我的HTML:
<div class='row' formArrayName="options">
<div *ngFor="let opt of form.controls.options.controls; let i=index">
<div [formGroupName]="i">
<select formArrayName="value">
<option></option>
<option>{{ opt.controls.value }}</option>
</select>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我减少了代码以方便.我想禁用select类型的字段.我试着做以下事情:
form = new FormGroup({
first: new FormControl({value: '', disabled: true}, Validators.required),
});
Run Code Online (Sandbox Code Playgroud)
不工作!有没有人有建议?
小智 125
name: [{value: '', disabled: true}, Validators.required],
name: [{value: '', disabled: this.isDisabled}, Validators.required],
Run Code Online (Sandbox Code Playgroud)
要么
this.form.controls['name'].disable();
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nko 44
请注意
如果您正在使用变量for condition创建表单并尝试稍后更改它将无法工作,即表单不会更改.
例如
this.isDisabled = true;
this.cardForm = this.fb.group({
'number': [{value: null, disabled: this.isDisabled},
});
Run Code Online (Sandbox Code Playgroud)
如果你改变了变量
this.isDisabled = false;
Run Code Online (Sandbox Code Playgroud)
表格不会改变.你应该用
this.cardForm.get( '编号')禁用();
BTW.
您应该使用patchValue方法来更改值:
this.cardForm.patchValue({
'number': '1703'
});
Run Code Online (Sandbox Code Playgroud)
小智 28
我通过将带有标签的输入对象包装在字段集中解决了它:字段集应该将禁用属性绑定到布尔值
<fieldset [disabled]="isAnonymous">
<label class="control-label" for="firstName">FirstName</label>
<input class="form-control" id="firstName" type="text" formControlName="firstName" />
</fieldset>
Run Code Online (Sandbox Code Playgroud)
Ale*_* Po 19
所述disabling
FormControlprevents
它存在于,在成形saving
。您可以将其设置为readonly
属性。
你可以通过这种方式实现它:
HTML :
<select formArrayName="value" [readonly] = "disableSelect">
Run Code Online (Sandbox Code Playgroud)
TS :
this.disbaleSelect = true;
Run Code Online (Sandbox Code Playgroud)
详情在这里
Pie*_*ece 15
this.form.enable()
this.form.disable()
Run Code Online (Sandbox Code Playgroud)
或表单控制“第一”
this.form.get('first').enable()
this.form.get('first').disable()
Run Code Online (Sandbox Code Playgroud)
您可以在初始设置上设置禁用或启用。
first: new FormControl({disabled: true}, Validators.required)
Run Code Online (Sandbox Code Playgroud)
Vol*_*mil 12
在具有反应形式的DOM中使用禁用是一种不好的做法。FormControl
当您从中初始化时,可以在中设置此选项
username: new FormControl(
{
value: this.modelUser.Email,
disabled: true
},
[
Validators.required,
Validators.minLength(3),
Validators.maxLength(99)
]
);
Run Code Online (Sandbox Code Playgroud)
财产value
是没有必要的
或者您可以使用get('control_name')
并设置表单控件disable
this.userForm.get('username').disable();
Run Code Online (Sandbox Code Playgroud)
小智 8
在 FormControl 中提供disabled
true 属性肯定会禁用输入字段。
this.form=this.fb.group({
FirstName:[{value:'first name', disabled:true}],
LastValue:['last name,[Validators.required]]
})
Run Code Online (Sandbox Code Playgroud)
上面的示例将禁用FirstName
输入字段。
但是,当您尝试通过这样的表单访问禁用的字段值时,真正的问题就会出现,
console.log(this.form.value.FirstName);
并且它显示为undefined
而不是打印字段的实际值。因此,要访问禁用字段的值,必须getRawValue()
使用Reactive Forms
. 即console.log(this.form.getRawValue().FirstName);
会打印表单字段的实际值而不是未定义的。
一种更通用的方法是。
// Variable/Flag declare
public formDisabled = false;
// Form init
this.form = new FormGroup({
name: new FormControl({value: '', disabled: this.formDisabled},
Validators.required),
});
// Enable/disable form control
public toggleFormState() {
this.formDisabled = !this.formDisabled;
const state = this.formDisabled ? 'disable' : 'enable';
Object.keys(this.form.controls).forEach((controlName) => {
this.form.controls[controlName][state](); // disables/enables each form control based on 'this.formDisabled'
});
}
Run Code Online (Sandbox Code Playgroud)