-3

我知道您可以使用带有数组的 FormControl 来构建多选项 MatSelect,但我正在尝试使用 FormArrays 来处理多选。我不断收到错误,在谷歌搜索了一段时间后,最终找到了一种解决方法,它只从 FormArray 中获取值,将其设置为 FormControl 作为数组,然后订阅它以设置 FormControl 中的原始 FormArray 值。不过我不喜欢这个解决方案,想知道是否有人有一个工作示例来说明如何将 FormArray 与 MatSelect 一起使用

  <mat-select
    multiple
    placeholder="placeholder text"
    [formControlArray]="nameOfFormControlArray">
    <mat-option
      *ngFor="let option of options | keyvalue: originalOrder ; let i = index"
      [value]="option.key === 'true' ? true : (!option.key || option.key === 'false') ? false : option.key"
      [attr.name]="formControlName">
      {{ option.value.name || option.key }}
    </mat-option>
  </mat-select>
4

1 回答 1

0

如果它可以帮助任何人,这是我正在使用的解决方法。我创建了“formControl”,它只是一个常规的 FormControl。OnInit 加载了他保存的值并与 MatSelect 一起使用。同时它的 valueChanges 被订阅并用于填充 formControlArray。每次清除数组以删除其中的所有 FormControl,然后将每个值作为新的 FormControl 实例推入。它不是超级干净,但它确实有效。

      this.formControl.valueChanges.subscribe((values) => {
        formControlArray.clear({ emitEvent: false });

        values.forEach((value) => formControlArray.push(new FormControl(value)));
        this.parentFormGroup.get(this.formControlName).markAsDirty();
      });
    }
于 2022-02-08T16:16:35.117 回答