Angular Reactive Form with Angular Materials
すべてのコントロールに、必要なバリデーターを追加します。
リアクティブフォームでチップコントロールを正しく設定する方法がわかりません。
必要なバリデーターが起動するようにformControlNameをどこに設定しますか?現時点では、間違っていると思う入力フィールドに設定しています。
もちろん、コースIDをコースIDを含むコンマ区切りの文字列にしたいだけです。
TS:
form: FormGroup;
ngOnInit() {
this.form = new FormGroup({
name: new FormControl("", [Validators.required]),
courseIds: new FormControl("", Validators.required)
});
}
HTML:
<form [formGroup]="form" (ngSubmit)="submit()">
<mat-form-field>
<input matInput type="text" formControlName="name" placeholder="Name">
</mat-form-field>
<mat-form-field>
<mat-chip-list #chipList>
<mat-chip *ngFor="let cid of courseIds" (removed) = "...">
{{cid}}
</mat-chip>
<input matInput formControlName="courseIds"
[matChipInputFor]="chipList"
placeholder="Ids"
(matChipInputTokenEnd)="add($event)">
</mat-chip-list>
</mat-form-field>
....
<button type="submit">OK</button>
</form>
formControlName
を_<mat-chip-list>
_レベルで設定してみてください。
テンプレートで、ngFor
コントロール値をループするようにcourseIds
を設定します
_<mat-form-field>
<mat-chip-list #chipList formControlName="courseIds">
<mat-chip *ngFor="let cid of form.get('courseIds').value" (removed) = "...">
{{cid}}
</mat-chip>
<input matInput
[matChipInputFor]="chipList"
placeholder="Ids"
(matChipInputTokenEnd)="add($event)">
</mat-chip-list>
</mat-form-field>
_
次に、コンポーネントで、courseIds
の初期値があるフォームグループを作成します。そうでない場合は、空の配列_[]
_を使用します(チップには文字列ではなく配列が表示されるため)。 add()
関数とremove()
関数で、courseIds
コントロール値の値をそれぞれ追加および削除します。
_form: FormGroup;
ngOnInit() {
this.form = new FormGroup({
name: new FormControl("", [Validators.required]),
courseIds: new FormControl([], Validators.required)
});
}
add() {
...
// Add new input to courseIds control value
this.courseIds.value.Push(value);
this.courseIds.updateValueAndValidity();
}
remove() {
...
// Remove element from control value array
this.courseIds.value.splice(index, 1); // where index = index of removed element
this.courseIds.updateValueAndValidity();
}
// use getter method to access courseIds control value easily
get courseIds() {
return this.form.get('courseIds');
}
_