Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度反应形式禁用控件无效_Angular_Angular Reactive Forms - Fatal编程技术网

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来检查它是否完美!谢谢,这很有效。我不得不说这种行为有点奇怪。