Cevabın zaten verildiğini biliyorum, ancak diğer yeni gelenlerin net bir fikir alabilmesi için bir formun değerini nasıl güncelleyeceğimi biraz kısa bir cevap vermek istiyorum.
form yapınız örnek olarak kullanmak için mükemmeldir. bu yüzden cevabım boyunca onu form olarak göstereceğim.
this.form = this.fb.group({
'name': ['', Validators.required],
'dept': ['', Validators.required],
'description': ['', Validators.required]
});
bizim formumuz üç FormControl olan bir FormGroup türü nesnesidir .
Model değerini güncellemenin iki yolu vardır:
Tek bir denetim için yeni bir değer ayarlamak için setValue () yöntemini kullanın. SetValue () yöntemi, form grubunun yapısına sıkı sıkıya yapışır ve denetimin tüm değerini değiştirir.
Form modelinde değişen nesnede tanımlanan özellikleri değiştirmek için patchValue () yöntemini kullanın.
SetValue () yönteminin katı denetimleri, karmaşık biçimlerde iç içe geçmiş hataları yakalamaya yardımcı olurken, patchValue () bu hatalarda sessizce başarısız olur.
Buradaki açısal resmi belgelerden
Bu nedenle, birden çok denetim içeren bir form grubu örneğinin değerini güncelleştirirken, yalnızca modelin bazı bölümlerini güncelleştirmek isteyebilirsiniz. patchValue () aradığınız kişidir.
örneğe bakalım. Eğer kullandığınız zaman ) (patchValue
this.form.patchValue({
dept: 1
});
//here we are just updating only dept field and it will work.
ancak setValue () öğesini kullandığınızda , form grubunun yapısına sıkı sıkıya bağlı olduğundan tam modeli güncellemeniz gerekir. yani, yazarsak
this.form.setValue({
dept: 1
});
// it will throw error.
Form grubu modelinin tüm özelliklerini geçirmeliyiz. bunun gibi
this.form.setValue({
name: 'Mr. Bean'
dept: 1,
description: 'spome description'
});
ama bu stili sık kullanmıyorum. Kodumu daha temiz ve daha anlaşılır tutmaya yardımcı olan aşağıdaki yaklaşımı kullanmayı tercih ederim.
Ne yaptığım, tüm denetimleri ayrı bir değişken olarak bildirir ve belirli denetimi güncelleştirmek için setValue () kullanın.
yukarıdaki form için böyle bir şey yapacağım.
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;
}
form denetimini güncellemeniz gerektiğinde, güncelleştirmek için yalnızca bu özelliği kullanın. Örnekte, kullanıcı açılır listeden bir öğe seçtiğinde soru soran kişi borç formu denetimini güncellemeye çalıştı.
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.
}
FormGroup tüm özellikleri ve yöntemleri hakkında bilgi almak için bir FormGroup API sahip öneririz .
Ek : alıcı hakkında bilgi için buraya bakın