Я пытаюсь заполнить раскрывающийся список из get
API. Я создал сервис и с помощью наблюдаемых возвращаю данные компоненту, который затем подписывается на сервис. Я могу получить данные, но они отражаются в выпадающем меню, только когда я щелкаю один раз за пределами выпадающего меню. Данные поступают мгновенно в console.log
, когда страница обновляется sh, но раскрывающийся список получает данные только тогда, когда я щелкаю где-то за пределами раскрывающегося списка. Я пытался прочитать много сообщений, касающихся раскрывающегося списка, но не смог решить эту проблему. Мой код ниже, поведение остается тем же, если я удаляю предложение (change)=selectedHandlerProjectId($event)
:
sample.component. html
<div class="form-group">
<label>
<h3>Select ProjectName</h3>
</label>
<select (change)=selectedHandlerProjectId($event) ngModel="selectedProjectName" class="form-control">
<option *ngFor="let Project of ProjectDetails" >{{Project.ProjectName}}</option>
</select>
</div>
sample .component.ts
@Component({
selector: 'app-sample',
templateUrl: './sample.component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class sampleComponent implements OnInit {
public ProjectDetails: TestProject[] = [];
constructor(private route:ActivatedRoute,
private projService:projectService) { }
getSelectedProject(): void{
this.projService.generateProjectList().subscribe(
projectDetails => {
this.projectDetails = projectDetails;
console.log(this.projectDetails);
}
);
}
//methods to get dropdown values
dropDownProjectId: string = '';
selectedHandlerProjectId(event : any)
{
if(event.target.value != 'default') {
this.dropDownProjectId = event.target.value;}
else {this.dropDownProjectId = null;}
}
ngOnInit() {
this.getSelectedProject();
}
sample.service.ts
import { Injectable } from '@angular/core';
import {ServiceConstants} from "../../shared/service-constants";
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";
import {TestProject} from "../models/model.component";
@Injectable({
providedIn: 'root'
})
export class projectService {
rootUrl: string = `${ServiceConstants.project_URL}/test-project-manager`;
constructor(private authHttp: HttpClient) {
}
generateProjectList(): Observable<any> {
return this.authHttp.get<Array<TestProject>>(`${this.rootUrl}/testprojects`);
}
}