私はngOnInit方法でフォームコントロールの値を開始しようとすると、私は次のエラーを取得する:設定デフォルトのフォーム値
エラー
formGroup expects a FormGroup instance. Please pass one in.
方法
ngOnInit() {
this.getBusinessData().then((response:any) => {
this.businessForm = this.formBuilder.group({
'business_name': [response.data.business_name, Validators.required],
'email': [response.data.email, Validators.required]
});
});
}
私は、APIサービスコールからの約束を返すと、setValueを使ってこの問題を回避することができました。それは動作します:
ngOnInit() {
// Build the form
this.businessForm = this.formBuilder.group({
'business_name' : ['', Validators.required],
'email' : ['', Validators.required],
});
// Fetch data for the view
this.getBusinessData().then((response:any) => {
this.businessForm.setValue({
business_name: response.data.business.business_name,
email: response.data.business.email
});
});
}
しかし、これは最善の方法ではないようです。 APIからフォームコントロールに返されたデータをバインドするにはどうすればよいですか?私はformGroupsを使用すべきではないようで、おそらくフォームにデータをバインドするためにngModelsを使うだけでしょうか?
UPATE:
ngOnInit() {
// Bind data to the form
this.getBusinessData().then((response:any) => {
this.businessForm = this.formBuilder.group({
'business_name' : [response.data.business.business_name==undefined?'': response.data.business.business_name, Validators.required],
'email' : [response.data.business.email==undefined?'': response.data.business.email, Validators.required]
});
});
}
しかし、コンソールで次のエラーが返されます:micronyks方法と 、私は次のことを試してみました
EXCEPTION: Uncaught (in promise): Error: Error in edit.template.html:12:10 caused by: formGroup expects a FormGroup instance. Please pass one in.
これはそれがラップされます場合に発生するようですAPIコールの周り。 の値はに上書きされていますか?
は動作していますか?もしそうなら、あなたは最良の方法を知りたいだけですか? – micronyks
@micronyks私の2番目の方法が動作しますが、私はよりクリーンなソリューションを探しています。私は、formGroupオブジェクトに対してsetValueメソッドを実行するよりも良い方法が必要だと感じています。 API呼び出しから約束が解決された後、formBuilderコンストラクタ内のデータをバインドする方法はありますか? –
私はこれを試したことがありませんが、これを試すことができます: 'this.businessForm = this.formBuilder.group({ 'business_name':[response.data.business.business_name == undefined? '':response.data.business.business_name、Validators.required]、 ... }); ' – micronyks