formgroupベースのモデルを作成する前に、サービスからのデータをロードするために、私は私が私のコンポーネントで、このようなフォームグループを持つ角度2のWebPACKでページを持っている:私はそのコードを実行する瞬間に2角度:どのように
this.myForm = this._fb.group({
date_of_visit: ['', [<any>Validators.required]]
});
ngOnInit()
に、私のデータは私のサービスを介して準備ができたときにコールバック関数が呼び出された後、再びそれを実行します。私のデータがデータベースから取得されたとき
setFormsData(d) {
this.myForm = this._fb.group({
date_of_visit: [d.date_of_visit, [<any>Validators.required]]
});
}
setFormsData
が呼び出されます。ですから、現時点ではngOnInit
のフォームを初期化し、新しいデータを補充して、両方のバリデーターを持っています。
QUESTION: どのようなデータを持つフォームをiniliazeする正しい方法がある、と私は二度私のフォームで同じコードを実行する必要がないようにどのように私は私のページの前に自分のデータをロードしていますか?
ソース画面:
https://gyazo.com/21347a7876e9d8289f5e3e72191baaeb https://gyazo.com/cdf80721d12c531f7c0d9aa420f31691
updateValueAndValidityを呼び出す前に自分のフォームにデータを設定する方法を教えてください。 – Vanquiza
データバインディングを使用していますか?私が書いたthis.dataはテンプレートでレンダリングされます。たとえば、あなたのテンプレートに ''があります。データを待った後、subscribeコールバック 'this.data = response.json()'で設定し、テンプレートが変更されます。 subscribeメソッドは非同期に要求し、サーバーからの応答を受け取る場合にのみコールバックが実行されます。要求を送信する前にフォームを初期化する主な理由は、非同期を実行し、要求が取得される前にレンダリングされるためです。 – unsafePtr
ページの前にデータを読み込むことはできません。しかし、サーバーからの応答が受信されない限りフォームを隠すことができます。 'reposne => {this.data = response.json(); this.myForm.updateValueAndValidity(); this.showForm = true;} '。 – unsafePtr