【问题标题】:mat-checkbox: The checkboxes are checked by default and affect each other?mat-checkbox:复选框默认勾选,相互影响?
【发布时间】:2020-06-27 00:22:26
【问题描述】:

我的RactiveForm 中有 7 个复选框。这就是我使用FormArray 生成它们的方式:

ts:

  weekDaysDe: string[] = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'];

  taskForm: FormGroup = this.formBuilder.group({
    weekDays: this.formBuilder.array([
      this.formBuilder.control(false),
      this.formBuilder.control(false),
      this.formBuilder.control(false),
      this.formBuilder.control(false),
      this.formBuilder.control(false),
      this.formBuilder.control(false),
      this.formBuilder.control(false),
    ]),
  });


html:

      <!-- weekdays -->
      <div class="task-form-control" *ngIf="isRecurrent">
        <mat-label>Tage</mat-label>
        <div class="weekdays" formArrayName="weekDays">
          <mat-checkbox
            *ngFor="
              let weekDay of taskForm.get('weekDays').value;
              let i = index
            "
            color="primary"
            labelPosition="before"
            [formControlName]="i"
            >{{ weekDaysDe[i] }}</mat-checkbox
          >
        </div>
      </div>

复选框按预期呈现,但有两个问题:

  1. 一开始都是检查的
  2. 他们互相勾选/取消勾选。例如,当我检查第一个时,最后一个也会被检查

我做错了什么?

【问题讨论】:

    标签: angular-material angular-reactive-forms formarray


    【解决方案1】:

    在模板中,使用表单数组控件通过 *ngFor 进行迭代。

    试试这个:

     <div class="weekdays" formArrayName="weekDays">
                <mat-checkbox *ngFor="
                  let weekDay of weekDaysArray.controls;
                  let i = index
                " color="primary" labelPosition="before" [formControlName]="i">{{ weekDaysDe[i] }}
                </mat-checkbox>
       </div>
    

    使用像这样的 getter 方法访问 FormArray 控件。

    componen.ts

     get weekDaysArray() : FormArray{
        return this.taskForm.get('weekDays') as FormArray;
      }
    

    Example

    【讨论】:

    • 感谢您的示例。效果很好。但我无法使用“控件”属性。它表示类型formarray上不存在该属性。
    • 你可以试试getter方法吗?
    • 谢谢。那行得通。我需要转换 FormArray 类型才能使用 .controls 属性
    • 嗨@Chellappanவ你能检查一下吗 - stackoverflow.com/questions/65244092/…
    • 我试图获取单个复选框的结果。我刚刚添加了 formControlName,它在更新条件下也能完美运行
    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 2012-08-03
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2019-05-27
    相关资源
    最近更新 更多