我有这个简单的表单,用于创建和更新案例,因此对于创建案例,用户将输入数据,并基于验证器I将获得form.valid
(true,false(。在更新的情况下,我只是从api中获取数据,并将该值设置为表单,然后禁用该表单;
this.form = fb.group({
name: ['', Validators.required],
lastName: ['', Validators.required],
address: [''],
});
所以当我禁用表单时,有效值总是false
;
ngOnInit() {
this.form.patchValue({
name: 'name',
lastName: 'Last Name'
});
this.form.disable();
}
堆叠litz示例
这是正确的。文件上写着:
当控件的状态为valid时,它是有效的。
状态文件显示:
控件的验证状态。有四种可能的验证状态值:
- 有效:此控件已通过所有验证检查
- 无效:此控件至少有一次验证检查失败
- 待定:此控件正在进行验证检查
- DISABLED:此控件不受验证检查的约束
您的表单已禁用,因此无效。
如果表单被禁用,Valid将返回false,所以我找到了两种方法来解决这个
直接检查valid
属性的方法我做了一个检查有效性的函数
isFormValid() : boolean {
return this.form.disabled ? true : this.form.valid
}
模板
<button [disabled]="!isFormValid()" (click)="update()">Update</button>
另一种不创建isFormValid函数的方法
<button [disabled]="!form.valid && form.disabled === false" (click)="update()">Update</button>
如果不是表单的所有字段都被禁用,那么在这种情况下,处理响应式表单的最佳解决方法是将这些字段标记为只读。不完全一样,但这样你就可以有一致的行为。
相关问题:
https://github.com/angular/angular/issues/11447https://github.com/angular/material2/issues/15399
对于输入被禁用的更新情况,模板驱动表单以通过验证的解决方法:
<div *ngIf="field.editable; else disabled">
<ion-input ..
></ion-input>
</div>
<ng-template #notEditable>
<p class="disabled">Some text</p>
</ng-template>