1. ホーム
  2. forms

[解決済み】FormBuilderコントロールの値を手動で設定する。

2022-04-04 03:14:37

質問

このせいで気が狂いそうだ。今緊急で、もう丸一日これに費やす余裕はない。

コンポーネント内でコントロール値('dept')を手動で設定しようとしていますが、うまくいきません。新しい値もコンソールに正しく記録されます。

以下はFormBuilderのインスタンスです。

initForm() {
  this.form = this.fb.group({
    'name': ['', Validators.required],
    'dept': ['', Validators.required],
    'description': ['', Validators.required],
  });
}

選択されたdeptを受信するイベントハンドラです。

deptSelected(selected: { id: string; text: string }) {
  console.log(selected) // Shows proper selection!
 
  // This is how I am trying to set the value
  this.form.controls['dept'].value = selected.id;
}

フォームが送信され、ログアウトすると this.form フィールドは空白のままです。 他の人が updateValue() しかし、これはベータ.1であり、コントロール上で呼び出す有効なメソッドとは思えません。

を呼び出そうとしたこともあります。 updateValueAndValidity() は成功しませんでした :(.

私なら、ただ ngControl="dept" を、フォームの他の部分でやっているように、カスタムディレクティブ/コンポーネントを使用します。

<ng-select
  [data]="dept"
  [multiple]="false"
  [items]="depts"
  (selected)="deptSelected($event)" <!-- This is how the value gets to me -->
  [placeholder]="'No Dept Selected'">
</ng-select>

解決方法は?

更新日 19/03/2017

this.form.controls['dept'].setValue(selected.id);

OLD:

今のところ型キャストをせざるを得ない。

(<Control>this.form.controls['dept']).updateValue(selected.id)

あまりエレガントでないのは同感です。将来のバージョンで改善されることを期待します。