Угловой 7: mat-select не может установить опцию по умолчанию без ngModel в ReactiveForm - PullRequest
0 голосов
/ 25 января 2019

Под моим угловым приложением 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>

Я пытаюсь установить начальное значение по умолчанию для выбранного входа: но я борюсь с двумя вещами:

  • Тот факт, что этов 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 голосов
/ 25 января 2019

Когда вам нужно значение по умолчанию для 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, для автоматического заполнения полей собранными данными.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...