Angular 7:在ReactiveForm中没有ngModel的情况下,mat-select无法设置默认选项

时间:2019-01-25 18:15:30

标签: javascript angular typescript angular-material angular-reactive-forms

在我的 Angular 7 应用中;我正在使用某种反应形式。

我的亲戚形式是这样初始化的:

private initFormConfig() {
    return this.formBuilder.group({
      modeTransfert: [''],
      modeChiffrement: [''],
    });
  }

我的表单包含一些输入和一些 mat-select

<div class="form-inline form-group">
          <label class="col-md-2 justify-content-start">URL Cible</label>
          <input  id="urlCible"
                  type="text"
                  maxlength="200"
                  ngDefaultControl
                  formControlName="urlCible"
                  class="col-md-6 form-control"/>
        </div>

        <div class="form-inline form-group">
          <label class="col-md-2 justify-content-start">Mode de transfert</label>
          <mat-form-field class="col-md-3" color="warn">
            <mat-select placeholder="Selectionner le mode de transfert"
                        id="modesTransfert"
                        [(value)]="selectedModeTransfert"
                        ngDefaultControl
                        formControlName="modeTransfert">
              <mat-option *ngFor="let modeTr of modeTransfertData"
                          [value]="modeTr.value">
                {{modeTr.viewValue}}
              </mat-option>
            </mat-select>
          </mat-form-field>
        </div>

我正在尝试为select输入设置初始默认值:但是我在两件事上苦苦挣扎:

  • 在Angular 7中已不再使用ngModel和ngFormControl(反应性表单)

  • 像这样修补其值的事实:

    this.addPefForm.patchValue({'modeTransfert':this.modeTransfertData [0] .value});

最初不能在 onInit AfterViewChecked 挂钩中完成,因为这会导致以下错误:

ParametragePefAdministrationFormComponent.html:107 ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'mat-selected: false'. Current value: 'mat-selected: true'.
    at viewDebugError (core.js:20342)
    at expressionChangedAfterItHasBeenCheckedError (core.js:20330)
    at checkBindingNoChanges (core.js:20432)
    at checkNoChangesNodeInline (core.js:23305)
    at checkNoChangesNode (core.js:23292)
    at debugCheckNoChangesNode (core.js:23896)
    at debugCheckRenderNodeFn (core.js:23850)
    at Object.eval [as updateRenderer] (ParametragePefAdministrationFormComponent.html:107)
    at Object.debugUpdateRenderer [as updateRenderer] (core.js:23839)
    at checkNoChangesView (core.js:23193)
  • 我也尝试将其与此绑定:[(value)]="selectedModeTransfert"

所有无效的方法。

建议

1 个答案:

答案 0 :(得分:1)

当需要mat-select的默认值时,您需要在启动反应形式时指定它,例如。

  states = [
    {name: 'Arizona', abbrev: 'AZ'},
    {name: 'California', abbrev: 'CA'},
    {name: 'Colorado', abbrev: 'CO'},
    {name: 'New York', abbrev: 'NY'},
    {name: 'Pennsylvania', abbrev: 'PA'},
  ];

  form = new FormGroup({
    state: new FormControl(this.states[3].abbrev),
  });

<mat-select formControlName="state">
    <mat-option *ngFor="let state of states" [value]="state.abbrev">
        {{state.name}}
    </mat-option>
</mat-select>

现在,当您的* ngFor值与FormControl中提供的值匹配时。

这也是显示从API检索的数据以自动使用收集的数据填充字段的方式。

希望这会有所帮助。