FormBuilder コントロールの値を手動で設定する 質問する

FormBuilder コントロールの値を手動で設定する 質問する

気が狂いそうです。私は追い詰められており、これに丸一日を費やす余裕はありません。

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

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

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

これは、選択された部門を受け取るイベント ハンドラーです。

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>

ベストアンサー1

更新日: 2017/03/19

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

古い:

今のところ、型キャストを実行する必要があります。

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

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

おすすめ記事