Как преобразовать Observable в array[]

у меня есть следующий метод в TypeScript, мне нужно привязать к угловой сетке

CountryService

GetCountries()  {
  return this.http.get(`http://services.groupkt.com/country/get/all`)
    .map((res:Response) => <CountryData[]>res.json().RestResponse["result"]);
}

GridComponent

  template: `
        <ag-grid-ng2 style="width: 100%" #agGrid class="ag-material"
                    rowHeight="50"
                    [gridOptions]="myGridOptions" 
                     >
            </ag-grid-ng2>
        `,

  this.myGridOptions.rowData= this.CountryService.GetCountries();

CountryData

export class CountryData{
  name: string;
  alpha2_code: string;
  alpha3_code: string;
}

но GetCoutries вернет Observable любого, неспособного привязаться к rowData?

как преобразовать Observable в CountryData[] в typescript ?

вы найдете данные JSON здесь: http://services.groupkt.com/country/get/all

4 ответов


вам нужно будет подписаться на ваши наблюдаемые:

this.CountryService.GetCountries()
    .subscribe(countries => {
        this.myGridOptions.rowData = countries as CountryData[]
    })

и в вашем html, где это необходимо, вы можете передать async труба к нему.


используя HttpClient (замена Http) в Angular 4.3+, весь процесс отображения/литья упрощается/устраняется.

используя класс CountryData, вы бы определили такой метод обслуживания:

getCountries()  {
  return this.httpClient.get<CountryData[]>('http://theUrl.com/all');
}

затем, когда вам это нужно, определите массив следующим образом:

countries:CountryData[] = [];

и подписаться на него такой:

this.countryService.getCountries().subscribe(countries => this.countries = countries);

полная настройка ответа тут также.


Это должно работать:

GetCountries():Observable<CountryData[]>  {
  return this.http.get(`http://services.groupkt.com/country/get/all`)
    .map((res:Response) => <CountryData[]>res.json());
}