javascript - 如何使用 Angular Material 对多个复选框进行分组

标签 javascript angular angular-material

假设我有一个用于创建商店的表单。我要输入它的名字,以及商店开门的日子。

所以我将有一个带有一些输入的表单,我想将复选框分组到一个垫表单字段中。

存储表单组件.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>

存储表单组件.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
    });
  }

它不起作用,我不明白为什么......

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

存储表单组件.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>

存储表单组件.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
    });
  }
}

最佳答案

也许你需要一个垫子选择列表

检查 Angular Material documentation

希望对你有帮助!

关于javascript - 如何使用 Angular Material 对多个复选框进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50730205/

相关文章:

angular - 在转换时禁用 mat-stepper 的动画

angular - 测试 Angular 库,同时测试库组件和示例应用程序

angular - 如何更改 Angular Material 排序图标

javascript - 在异步函数中不相关的等待期间拒绝响应事件

javascript - JSON.解析 : unexpected non-whitespace character after JSON data

javascript - 浏览器中的特殊鼠标事件 : wheel, 右键单击​​?

javascript - 如何以编程方式更改 Material Calendar <mat-calendar> 中的月份

javascript - 在 td 内锚定数据绑定(bind) - knockoutjs

Angular 2 : Weird Behavior When Trying to Access Component's Height using ElementRef

Angular Material 10 日期选择器(mat-datepicker)与其他输入字段不对齐