Я могу придумать несколько изменений / дополнений в вашем коде. Во-первых, вы должны изменить способ установки значения в форме:
const valueToSet = { value: "steak-0", viewValue: "Steak" }
this.myForm.dropdown.patchValue({
dropdown:valueToSet
}) ;
Выполнение этого приведет к ошибке, поскольку внутри this.myForm.dropdown.patchValue
не должно быть ключевого слова dropdown. Должно быть - this.myForm.patchValue
. Но даже после исправления этого, правильный способ установить значение:
this.myForm.controls["dropdown"].setValue("pizza-1");
или при использовании patchValue:
this.myForm.patchValue({dropdown: 'pizza-1'});
, то есть для программного изменения значения списка выбора , вы должны опираться на id
, а не на сам объект.
Далее необходимо убедиться, что в вашем пользовательском элементе управления есть метод writeValue()
:
writeValue(val: string): void {
this.selectedOption = val;
}
Затем, наконец, , привяжите selectedOption
(или innerValue
в вашем случае) к тегу mat-select
:
<mat-select placeholder="Favorite food" [(ngModel)]="selectedOption">
<mat-option *ngFor="let food of foods" [value]="food.value">
{{food.viewValue}}
</mat-option>
</mat-select>
Нет необходимости что-либо менять в компоненте приложения html. Он по-прежнему будет использовать реактивные формы:
<app-input-dropdown [foods]="foods" formControlName="dropdown">
</app-input-dropdown>
Я могу предоставить образец в Stackblitz, если вы все еще столкнетесь с проблемой. Просто дай мне знать.