Angular 角度反应形式禁用控件无效
我认为Angular 角度反应形式禁用控件无效,angular,angular-reactive-forms,Angular,Angular Reactive Forms,我认为禁用的控件不会得到验证。但我面临着这个问题 我已使用官方表格样本复制: 如果您在电子邮件字段中键入内容并将注意力集中在外,这将触发我正在执行的change事件: this.form.controls['firstName'].disable(); 尽管firstname不是必填字段,但它会得到验证,我们会看到一条红色消息。 如果没有这行代码,firstName可以为空,我们仍然可以保存 为什么会这样?当您禁用控件时,该控件是否有效,是表单,尽管该控件无效,但该表单仍然有效。e、 g
禁用的控件不会得到验证。但我面临着这个问题
我已使用官方表格样本复制:
如果您在电子邮件字段中键入内容并将注意力集中在外,这将触发我正在执行的change
事件:
this.form.controls['firstName'].disable();
尽管firstname不是必填字段,但它会得到验证,我们会看到一条红色消息。
如果没有这行代码,firstName可以为空,我们仍然可以保存
为什么会这样?当您禁用控件时,该控件是否有效,是表单,尽管该控件无效,但该表单仍然有效。e、 g
form=new FormGroup({
control1:new FormControl({value:null,disabled:true},Validators.required),
control2:new FormControl()
})
{{form.valid}} //true
{{form.get('control1').valid}} //false
在您的特定情况下,您可以更改函数是否对某些情况有效,例如:
get isValid() {
return this.form.controls[this.question.key].disabled ||
!this.form.controls[this.question.key].invalid;
}
更新了对不起,我的不好,在中我们可以看到状态可以是
- 有效的
- 无效的
- 未决
- 残废
当状态为“有效”时,表单控件有效-因此,如果状态为“禁用”,则“有效”为false。我们需要使用无效的“oposite”
get isValid() {
return !this.form.controls[this.question.key].invalid;
}
谢谢我不太明白。你是说表单是有效的,尽管我禁用的控件是无效的,对吗?但我感到困惑的是为什么我禁用的控件无效。为什么文本框(虽然不是必需的)无效?如果启用,验证通过,尽管没有值。对不起,@Sam,我的答案是错误的,您需要使用invalid来检查它是否完美!谢谢,这很有效。我不得不说这种行为有点奇怪。