禁用表单时,响应式表单有效属性返回 false

mal*_*awi 6 typescript angular angular-reactive-forms

我有这个简单的表单并用于创建和更新案例,因此对于创建案例,用户将输入数据并基于验证器我将获得form.valid(真,假)。在更新的情况下,我只是从 api 获取数据并将此值设置为表单并使表单禁用;

this.form = fb.group({
  name: ['', Validators.required],
  lastName: ['', Validators.required],
  address: [''],
});
Run Code Online (Sandbox Code Playgroud)

因此,当我禁用表单时,有效值始终为false

 ngOnInit() {
    this.form.patchValue({
      name: 'name',
      lastName: 'Last Name'
    });

    this.form.disable();
  }
Run Code Online (Sandbox Code Playgroud)

堆叠闪电战示例

JB *_*zet 11

这是对的。文档说:

当控件的状态为 VALID 时,它是有效的。

状态文档说:

控件的验证状态。有四种可能的验证状态值:

  • VALID:此控件已通过所有验证检查。
  • 无效:此控件至少未通过一项验证检查。
  • PENDING:此控件正在执行验证检查。
  • 禁用:此控件免于验证检查。

您的表单已禁用,因此无效。


mal*_*awi 8

如果表单被禁用,Valid 将返回 false,所以我找到了两种方法来解决这个问题

直接检查valid属性我做了一个检查有效性的函数

 isFormValid() : boolean { 
    return this.form.disabled ? true : this.form.valid
  }
Run Code Online (Sandbox Code Playgroud)

模板

<button [disabled]="!isFormValid()" (click)="update()">Update</button>
Run Code Online (Sandbox Code Playgroud)

另一种无需创建 isFormValid 函数的方法

<button [disabled]="!form.valid && form.disabled === false" (click)="update()">Update</button>
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,但是它如何检查禁用表单的有效性?当表单被禁用时,您总是返回“true”,因此从技术上讲,如果我有两个具有空值的必需控件,您的函数会告诉我它是有效的。 (3认同)