リアクティブフォームを使用してAngularにフォームを構築しています。 FormBuilderを使用してフィールドのグループを作成しています。テキストボックスの場合、これは非常にうまく機能します。しかし、ラジオボタンのformControlが見つかりません。
これはどのように作動しますか?テキスト入力で使用するのと同じように<input formControlName="gender" type="radio">
を使用する必要がありますか?
テキスト入力の場合と同じように
<input formControlName="gender" type="radio">
を行う必要がありますか?
はい。
これはどのように作動しますか?
フォーム制御ディレクティブは、ControlValueAccessor
ディレクティブを使用してネイティブ要素と通信します。可能な入力ごとにControlValueAccessors
の異なるタイプがあります。値アクセサディレクティブのselector
によって正しいものが選択されます。セレクタは、type
が<input>
であることに基づいています。 type="radio"
がある場合、無線の値アクセサーが使用されます。
コンポーネントで、フォームの一部としてラジオボタンを定義します。
export class MyComponent {
form: FormGroup;
constructor(fb: FormBuilder){
this.form = fb.group({
gender: ""
});
}
}
コンポーネントHTMLで、フォームを構築します。
<div class="form-group">
<label>Please select your gender</label>
<div class="row">
<label class="md-check">
<input type="radio" value="female" name="gender" formControlName="gender">
Female
</label>
<label class="md-check">
<input type="radio" value="male" name="gender" formControlName="gender">
Male
</label>
</div>
</div>
ここでは示していませんが、送信ボタンを使用してフォーム全体を作成する方法を知っていると思います。
フォームが送信されると、次のラジオボタンの値を取得できます。
let genderValue = this.form.value.gender;
これは、チェックされているラジオボタンに応じて、「女性」または「男性」になります。
これがお役に立てば幸いです。幸運を!
私が気づいたリアクティブフォームについて追加する小さなもの。値が整数の場合、文字列に変更する必要があります。そうしないと、ラジオボタンが選択されません。
this.jobForm = this._fb.group({
id: [res["job"]["id"]],
job_status: [res["job"]["job_status"]**["id"].toString()**,Validators.required],
title: [res["job"]["title"],Validators.required]
});
Angular Material controls は、(ほぼ)現在使用できるほど成熟しています。
サンプルでは主にngModelを使用していますが、formControlNameを使用して行う方法は次のとおりです。
<mat-radio-group formControlName="colorFilter" fxLayout="column" fxLayoutGap=".25rem">
<mat-radio-button [value]="'Blue'">Blue things</mat-radio-button>
<mat-radio-button [value]="'Red'">Red things</mat-radio-button>
<mat-radio-button [value]="'Orange'">Orange things</mat-radio-button>
</mat-radio-group>
angular/flex-layout を使用して、ボタンを縦列に配置しています。
(定数の場合はvalue='Blue'
、モデルプロパティを参照する場合は[value]="blueColorName"
も実行できます。
0
には問題があるかもしれないと思う.