أنجولار - كيفية تحويل Observable إلى مصفوفة[]
لدي الطريقة التالية في تايبسكريبت، أحتاج إلى ربطها بشبكة Angular
خدمة الدولة
GetCountries() {
return this.http.get(`http://services.groupkt.com/country/get/all`)
.map((res:Response) => <CountryData[]>res.json().RestResponse["result"]);
}
مكوّن الشبكة
template: `
<ag-grid-ng2 style="width: 100%" #agGrid class="ag-material"
rowHeight="50"
[gridOptions]="myGridOptions"
>
</ag-grid-ng2>
`,
this.myGridOptions.rowData= this.CountryService.GetCountries();
بيانات الدولة
export class CountryData{
name: string;
alpha2_code: string;
alpha3_code: string;
}
لكن GetCountries ستُرجع Observable من أي نوع، غير قادر على الربط بـ rowData؟
كيف يمكن تحويل Observable إلى CountryData[] في Typescript؟
يمكنك العثور على بيانات JSON هنا: http://services.groupkt.com/country/get/all
الإجابة رقم 1
ستحتاج إلى الاشتراك في الملاحظات الخاصة بك:
this.CountryService.GetCountries()
.subscribe(countries => {
this.myGridOptions.rowData = countries as CountryData[]
})
وفي ملف الـ html الخاص بك، حيثما احتجت، يمكنك تمرير المِلَف async إليه.
الإجابة رقم 2
باستخدام 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);
تم نشر إجابة إعداد كاملة هنا أيضًا.
