Я вижу несколько проблем с вашим примером, поэтому я попытаюсь помочь вам, предложив другой подход и объясняя, что я делаю по пути.
В приложении Angular при использовании двух При связывании с [(ngModel)]
для выбора, изначально выбранный параметр всегда будет установлен на тот, который соответствует значению ngModel
.
. В вашем примере начальное значение selectedCompany
никогда не устанавливается Именно по этой причине ваша начальная загрузка страницы отображает меню, в котором ничего не выбрано. Вам нужно будет установить значение для всех ваших опций, включая первый, чтобы заставить это работать.
Теперь, так как вы не предоставили структуру вашей модели под названием Company
, я собираюсь импровизировать и предполагать, что он содержит 2 элемента, name
и value
. Так что просто помните, что вам нужно отрегулировать то, что у меня есть ниже, чтобы соответствовать фактической структуре ваших данных.
Во-первых, для тегов опций в вашем выборе в шаблоне, id предлагает использовать атрибут value
, который мы будем заполнять строками вместо ngValue
, который может использоваться для хранения объекта или строки. Вы можете получить объект, который содержит все необходимые данные, через событие change
.
Позволяет настроить файл шаблона следующим образом:
<select class="form-control" [(ngModel)]="selectedCompany" (change)="companyChange($event.target.value)">
<option [value]="'init'">-- select a company --</option>
<option *ngFor="let company of companies" [value]="company.value">{{company.name}}</option>
</select>
Далее, в файле компонента , давайте изменим то свойство, которое мы используем для двухсторонней привязки вашего выбора, чтобы оно было напечатано в виде строки:
selectedCompany:string;
Далее, давайте создадим новое свойство, набранное для вашей модели который мы в конечном итоге установим для выбранной компании:
myCompany:Company;
Далее, установите изначально выбранный параметр в вашем компоненте так, чтобы «- выбрать компанию -» отображалось как изначально выбранный параметр:
ngOnInit() {
this.selectedCompany = 'init';
this.loadCompanies();
}
И, наконец, внутри события change
вы можете использовать метод find()
для получения полного набора данных, который вам нужен:
companyChange(value) {
this.myCompany = this.companies.find(element => element.value === value);
console.log("User selected the company:", this.myCompany);
}
Надеюсь, это поможет.