34

我的组件中有一个反应式表单,我想将touched每个输入的属性设置为true. 我当前的代码会这样做,但会引发错误Cannot set property touched of #<AbstractControl> which has only a getter

addressForm: FormGroup;

...

this.addressForm = this._fb.group({
    street: ["", [<any>Validators.required]],
    city: ["", [<any>Validators.required]],
    state: ["", [<any>Validators.required]],
    zipCode: ["", [<any>Validators.required]],
    country: ["", [<any>Validators.required]]
});

...

for (var key in this.addressForm.controls) {
    this.addressForm.controls[key].touched = true;
}

如何将touched每个输入的值设置为true

4

2 回答 2

76

有一个非常简单的方法可以做到这一点:markAsTouched. 在表单组上使用它应该足够了。

this.addressForm.markAsTouched()

如果您出于某种原因想要手动标记所有控件,它们本身就有此方法可用。

markAsTouchedAbstractControl所有表单元素继承自的方法。出于好奇,您可能希望访问@angular/forms/src/model.d.ts声明文件以查找表单对象的一些更有趣的方法。或者只是访问文档

于 2017-02-22T21:17:33.963 回答
0

如果您#myForm="ngForm"在 HTML 表单元素上使用,您可以myForm.submitted在 HTML 中访问,因此可能不需要费心.touched

于 2019-08-12T20:04:11.627 回答