首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用angular-material对多个复选框进行分组

如何使用angular-material对多个复选框进行分组
EN

Stack Overflow用户
提问于 2018-06-07 05:56:13
回答 2查看 20.7K关注 0票数 11

假设我有一个创建商店的表单。我想输入它的名称,以及商店的开业日期。

因此,我将有一个带有一些输入的表单,并且我希望在一个mat- form -field中对复选框进行分组。

store-form-component.html:

代码语言:javascript
复制
<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>

store-form-component.ts:

代码语言:javascript
复制
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
    });
  }

它不工作,我不知道为什么.

编辑:感谢@g-tranter (和其他人的帖子),我可以解决这个问题。最终的代码如下所示:

store-form-component.html:

代码语言:javascript
复制
<form (ngSubmit)="onSaveStore()" [formGroup]="storeForm">
  <div [formGroup]="storeForm.controls.availableDays">
    <mat-checkbox *ngFor="let availableDay of days;" formControlName="{{availableDay}}">{{availableDay}}</mat-checkbox>
  </div>
</form>

store-form-component.ts:

代码语言:javascript
复制
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
    });
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 23:26:48

您正在将表单控件名称设置为数字索引:

代码语言:javascript
复制
formControlName="{{i}}"

表单组中不存在的。

您需要将其设置为“星期一”等,或者设置

代码语言:javascript
复制
[formControl]="availableDay"
票数 2
EN

Stack Overflow用户

发布于 2018-06-07 06:05:04

也许你需要一个mat-selection list

检查Angular Material documentation

希望能对你有所帮助!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50730205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档