我有一个我想根据条件动态禁用的选择控件:
this.activityForm = this.formBuilder.group({
docType: [{ value: '2', disabled: this.activeCategory != 'document' }, Validators.required]
});
但是,即使在某些时候this.activeCategory变为'document',docType也不会启用。
我该如何解决这个问题?
答案 0 :(得分:29)
由于我不知道你是如何操纵activeCategory
(也许它也是FormControl
?),我会建议采用以下方法:
您可以使用(change)
来检测this.activeCategory
何时发生变化,如下所示:
1 - 如果您正在使用ngModel
:
<input type="text" [(ngModel)]="activeCategory" (change)="checkValue($event)">
2 - 如果是FormControl
:
<input type="text" formControlName="activeCategory" (change)="checkValue($event)">
因此,在组件中,您可以使用docType
方法操纵disable/enable
控件:
checkValue(event: Event) {
const ctrl = this.activityForm.get('docType');
if (event.value === 'document') {
ctrl.enable();
} else {
ctrl.disable();
}
}
答案 1 :(得分:7)
您必须以不同于其他HTML元素的方式处理select元素。 this.activeCategory
更改时,您必须执行重置。
这样的事情:
this.activityForm.controls['docType'].reset({ value: '2', disabled: false });
当然,您可能希望使用当前值,而不是硬编码'2'
。
同样的事情要禁用它,如果需要(可能会)。
this.activityForm.controls['docType'].reset({ value: '2', disabled: true });
有关ng表单控件reset的更多信息。
答案 2 :(得分:1)
从.ts文件,您可以从控件中添加密钥, 并在其中添加禁用的项:true(停用表单项) 或false(激活表单项)
.ts
public form_name=new FormGroup({
series: new FormControl({value: '', disabled: true}),
inten: new FormControl({value: '', disabled: true}),
rep: new FormControl({value: '', disabled: true}),
rest: new FormControl({value: '', disabled: false}),
observation: new FormControl({value: '', disabled: false}),
});
.html
<form [formGroup]="form_name" >
<label for="series" >Series</label>
<input type="text" formControlName="series" >
<label for="inten" >Inten</label>
<input type="text" formControlName="inten" >
<label for="rep" >Rep</label>
<input type="text" formControlName="rep" >
<label for="rest" >rest</label>
<textarea formControlName="rest" rows="3" cols="30" ></textarea>
</form>
答案 3 :(得分:0)
this.activityForm.controls ['docType']。disable();
答案 4 :(得分:-1)
您可以在此处使用三元运算符来有条件地禁用表单控制。
this.activityForm = this.formBuilder.group({
docType: [{ value: '2', disabled: this.activeCategory != 'document' ? true : false }, Validators.required]
});