Ber*_*aga 6 javascript angular-material angular
假设我有一个创建商店的表单。我想输入名称,以及商店的营业时间。
因此,我将拥有一个带有一些输入的表单,并且我想将一个复选框组合在一个mat-form-field中。
store-form-component.html:
<form (ngSubmit)="onSaveStore()" [formGroup]="storeForm">
<mat-form-field>
<mat-label>Store name</mat-label>
<input matInput placeholder="store name" formControlName="name" required>
</mat-form-field>
<mat-form-field [formGroup]="storeForm.controls.availableDays>
<mat-checkbox *ngFor="let availableDay of storeForm.controls.availableDays.controls; let i=index" formControlName="{{i}}">{{i}}</mat-checkbox>
</mat-form-field >
</form>
Run Code Online (Sandbox Code Playgroud)
store-form-component.ts:
export class StoreFormComponent implements OnInit {
// Form Groups
storeForm: FormGroup;
constructor(
private formBuilder: FormBuilder
) {}
ngOnInit(): void {
this.initForm();
}
initForm(): void {
this.storeForm = this.formBuilder.group({
name: "",
availableDays: this.getAvailableDays()
});
}
getAvailableDays(): FormGroup {
return this.formBuilder.group({
monday: false,
tuesday: false,
wednesday: false,
thursday: false,
friday: false,
saturday: false,
sunday: false
});
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,我不知道为什么...
编辑:由于@ g-tranter(和其他SO职位),我可以解决此问题。最终代码如下:
store-form-component.html:
<form (ngSubmit)="onSaveStore()" [formGroup]="storeForm">
<div [formGroup]="storeForm.controls.availableDays">
<mat-checkbox *ngFor="let availableDay of days;" formControlName="{{availableDay}}">{{availableDay}}</mat-checkbox>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
store-form-component.ts:
export class StoreComponent implements OnInit {
// Form Groups
storeForm: FormGroup;
days: Array<string>;
constructor(private formBuilder: FormBuilder) {}
ngOnInit(): void {
this.initForm();
// this is useful to iterate over the form group
this.days = Object.keys(this.storeForm.controls.availableDays.value);
}
initForm(): void {
this.storeForm = this.formBuilder.group({
name: "",
availableDays: this.getAvailableDays()
});
}
getAvailableDays(): FormGroup {
return this.formBuilder.group({
monday: false,
tuesday: false,
wednesday: false,
thursday: false,
friday: false,
saturday: false,
sunday: false
});
}
}
Run Code Online (Sandbox Code Playgroud)
您将表单控件名称设置为数字索引:
formControlName="{{i}}"
Run Code Online (Sandbox Code Playgroud)
它不存在于表单组中。
您需要将其设置为“星期一”等或设置
[formControl]="availableDay"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7433 次 |
| 最近记录: |