2017-02-22 26 views
5

У меня есть реактивная форма в моем компоненте, и я хочу установить свойство touched на каждом из входов, равном true. Мой текущий код это, но он выдает мне ошибку Cannot set property touched of #<AbstractControl> which has only a getter:Angular2 - Как установить свойство `touched` от от до true

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?

+0

** Touched and Untouched ** - только свойства, доступные для чтения. Вы не можете присвоить значение. – Aravind

+0

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

ответ

16

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

this.addressForm.markAsTouched() 

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

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