Angular 7 не может установить значение для элемента управления формой mat-select

У меня есть эта группа форм с несколькими элементами управления формой:

myForm: FormGroup = new FormGroup({
    ...
    myControl: new FormControl(),
    ...
  });

Форма управления myControl такова:

<mat-form-field class="col-large">
            <mat-select formControlName="myControl">
              <mat-option *ngFor="let data of dataMap" [value]="data.value">
                {{data.description}}
              </mat-option>
            </mat-select>
          </mat-form-field>

dataMap - это в основном массив объектов, у которых есть значение свойства и описание свойства, оба они являются строками, поэтому пример объекта:

{
  "value":"1",
  "description":"desc"
}

Затем у меня есть ввод с автозаполнением, который работает с тем же dataMap, и всякий раз, когда пользователь начинает печатать, он просматривает описания массива, предлагая только те, которые соответствуют написанному тексту. Затем, когда пользователь выбирает параметр, он вызывает метод, который извлекает соответствующее значение из массива и устанавливает значение, полученное для myControl. Ожидаемое поведение заключается в том, что при выборе параметра в автозаполнении значение изменяется в myControl и отображается новое описание.
Проблема в том, что значение для myControl установлено правильно, но выбранный параметр не отображается.
Я не понимаю, что в методе ngOnInit я установил значение по умолчанию из карты для myControl следующим образом:

this.myForm.get('myControl').setValue("1");

и он правильно выбирает параметр и показывает его как выбранный. Затем в методе обратного вызова для выбора автозаполнения я делаю то же самое, но он не выбран. Элемент управления формы становится пустым.
Я проверил значение, которое я получаю от автозаполнения, и оно существует в dataMap. Я также распечатал значение myControl после установки нового значения, и это новое правильное значение.


person Usr    schedule 02.08.2019    source источник
comment
Мы не можем отлаживать код, не видя его.   -  person JB Nizet    schedule 02.08.2019
comment
Я знаю, но я не могу опубликовать код и данные ... Я попробую настроить это, но не знаю, получится ли у меня это сделать   -  person Usr    schedule 02.08.2019


Ответы (1)


сделай это вместо

let test = {
  "value":"1",
  "description":"desc"
}

this.myForm.get('myControl').setValue(test);

вы должны передать объект того же типа в myControl

person Elouafi    schedule 02.08.2019