Я знаю, що відповідь вже дана, але я хочу дати коротку відповідь, як оновити значення форми, щоб інші нові бажаючі могли отримати чітке уявлення.
ваша форма форми настільки досконала, щоб використовувати її як приклад. тож у всій своїй відповіді я позначатиму це як форму.
this.form = this.fb.group({
'name': ['', Validators.required],
'dept': ['', Validators.required],
'description': ['', Validators.required]
});
тому наша форма є об'єктом типу FormGroup, який має три FormControl .
Існує два способи оновлення значення моделі:
Використовуйте метод setValue () для встановлення нового значення для окремого елемента керування. Метод setValue () суворо дотримується структури групи форм і замінює все значення для елемента керування.
Використовуйте метод patchValue () для заміни будь-яких властивостей, визначених в об'єкті, які змінилися у формі форми.
Сувора перевірка методу setValue () допомагає вловлювати помилки введення в складні форми, в той час як patchValue () мовчки не відповідає цим помилкам.
З офіційної документації Angular тут
Отже, оновлюючи значення для екземпляра групи форм, який містить декілька елементів керування, але ви можете лише оновити частини моделі. patchValue () - це той, кого ви шукаєте.
давайте подивимось приклад. Коли ви використовуєте patchValue ()
this.form.patchValue({
dept: 1
});
//here we are just updating only dept field and it will work.
але коли ви використовуєте setValue (), вам потрібно оновити повну модель, оскільки вона чітко дотримується структури групи форм. так, якщо ми пишемо
this.form.setValue({
dept: 1
});
// it will throw error.
Ми повинні передати всі властивості моделі форми форми. подобається це
this.form.setValue({
name: 'Mr. Bean'
dept: 1,
description: 'spome description'
});
але я не використовую цей стиль часто. Я вважаю за краще використовувати наступний підхід, який допомагає зберегти чистіший і зрозуміліший код.
Що я роблю, я оголошую всі елементи управління окремою змінною і використовую setValue () для оновлення цього конкретного елемента управління.
для наведеної форми я зроблю щось подібне.
get companyIdentifier(): FormControl {
return this.form.get('name') as FormControl;
}
get dept(): FormControl {
return this.form.get('dept') as FormControl;
}
get description(): FormControl {
return this.form.get('description') as FormControl;
}
коли вам потрібно оновити контроль форми, просто скористайтеся цим властивістю, щоб оновити його. У прикладі запитуючий спробував оновити контроль форми форми, коли користувач вибирав предмет зі спадного списку.
deptSelected(selected: { id: string; text: string }) {
console.log(selected) // Shows proper selection!
// instead of using this.form.controls['dept'].setValue(selected.id), I prefer the following.
this.dept.setValue(selected.id); // this.dept is the property that returns the 'dept' FormControl of the form.
}
Я пропоную ознайомитись з API FormGroup, щоб дізнатись про всі властивості та методи FormGroup.
Додатково : дізнатися про геттер дивіться тут