Angular2 - Как установить свойство "touch" в форме в true

У меня есть реактивная форма в моем компоненте, и я хочу установить свойство 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?

Ответ 1

Для этого существует довольно простой способ: markAsTouched. Достаточно использовать его в группе форм.

this.addressForm.markAsTouched()

Если вы хотите по какой-либо причине пометить все элементы управления вручную, они сами имеют этот метод.

markAsTouched - это метод элементов формы AbstractControl, наследуемых от. Из любопытства вы можете захотеть посетить файл декларации @angular/forms/src/model.d.ts, чтобы найти еще несколько интересных методов объектов формы. Или просто посетите документацию.

Ответ 2

Если вы используете #myForm="ngForm" в своем элементе формы HTML, у вас есть доступ к myForm.submitted в HTML, поэтому вам не нужно беспокоиться о .touched