Angular 反应式表单禁用控件无效
Angular Reactive Form Disabled Control is not valid
我认为 disabled
控件不会得到验证。但我正面临这个问题。
我使用官方Angular反应式表格样本进行了转载:
https://stackblitz.com/edit/angular-hyvj24?file=src/app/dynamic-form-question.component.ts
如果您在电子邮件字段中输入内容并聚焦,这将触发我正在执行的 change
事件:
this.form.controls['firstName'].disable();
虽然名字不是必填字段,但它已通过验证并且我们看到一条红色消息。
如果没有这行代码,firstName 可以为空,我们仍然可以保存。
为什么会这样?
禁用控件后,控件是否有效,是形式控件无效但有效。例如
form=new FormGroup({
control1:new FormControl({value:null,disabled:true},Validators.required),
control2:new FormControl()
})
{{form.valid}} //true
{{form.get('control1').valid}} //false
在您的特定情况下,您可以更改函数 isValid,例如:
get isValid() {
return this.form.controls[this.question.key].disabled ||
!this.form.controls[this.question.key].invalid;
}
已更新对不起,我的错,在the docs我们可以看到状态可以
- 有效
- 无效
- 待定
- 已禁用
表单控件在状态有效时有效 - 所以如果状态被禁用,则有效为假。我们需要使用 invalid
的“反义词”
get isValid() {
return !this.form.controls[this.question.key].invalid;
}
我认为 disabled
控件不会得到验证。但我正面临这个问题。
我使用官方Angular反应式表格样本进行了转载:
https://stackblitz.com/edit/angular-hyvj24?file=src/app/dynamic-form-question.component.ts
如果您在电子邮件字段中输入内容并聚焦,这将触发我正在执行的 change
事件:
this.form.controls['firstName'].disable();
虽然名字不是必填字段,但它已通过验证并且我们看到一条红色消息。 如果没有这行代码,firstName 可以为空,我们仍然可以保存。
为什么会这样?
禁用控件后,控件是否有效,是形式控件无效但有效。例如
form=new FormGroup({
control1:new FormControl({value:null,disabled:true},Validators.required),
control2:new FormControl()
})
{{form.valid}} //true
{{form.get('control1').valid}} //false
在您的特定情况下,您可以更改函数 isValid,例如:
get isValid() {
return this.form.controls[this.question.key].disabled ||
!this.form.controls[this.question.key].invalid;
}
已更新对不起,我的错,在the docs我们可以看到状态可以
- 有效
- 无效
- 待定
- 已禁用
表单控件在状态有效时有效 - 所以如果状态被禁用,则有效为假。我们需要使用 invalid
的“反义词”get isValid() {
return !this.form.controls[this.question.key].invalid;
}