چگونه مقادیر را در یک آرایه داده شیء پاسخ با استفاده از *ngFor در انگولار پر کنیم


من میخواهم دادههای دریافتی از یک API سمت سرور را در Angular با استفاده از *ngFor نمایش دهم. اما دادهها به صورت یک شیء که شامل یک آرایه با اندازه ۱۰ است، میآیند. این تصویری از پاسخ سرور است که در console.log(hotels); نمایش داده میشود.

این کد انگولار است که من در فایل component.ts نوشتهام

   hotelInfo = [];
   hotelInfo2 = [];

    getTopHotelInfo() {
        const params = [];
        params.push({code: 'dateType', name: 'CHECKIN'});
        params.push({code: 'fromDate', name: '2018-01-01'});
        params.push({code: 'toDate', name: '2019-01-01'});
        params.push({code: 'topN', name: 10});
        this.dashboardServiceHandler.getTopHotelInfo([], params).subscribe(
          hotels => {
            console.log(hotels);
            this.hotelInfo.push(hotels);
            console.log(this.hotelInfo);
            for (let i = 0; i < this.hotelInfo.length; i++) {
                const hotel = this.hotelInfo[i];
                console.log(hotel);
                /// this.hotelInfo2.push(hotels[i]);
                this.hotelInfo2.push({code: hotel.code, name: hotel.name});
                console.log(this.hotelInfo2[i]);
            }
         });
      }

این کدی است که من در فایل component.html نوشتهام

<li *ngFor="let hotel of hotelInfo">
        <div class="c-inbox-widget__item">
          <div class="c-inbox-widget__item__avatar" style="background: #A3A1FB">
            01
          </div>

            <div>
              <span class="c-inbox-widget__item__author">{{hotel.name}}</span>
              <!--<span class="c-inbox-widget__item__text">Canada</span>-->
            </div>

            <div class="c-inbox-widget__item__value">$29,193</div>

        </div>
   </li>

چطور میتوانم آن دادهها را به صورت یک آرایه برای *ngFor بدست بیاورم

پاسخ شماره ۱

این روش را امتحان کنید. پاسخ شما یک شیء است و شامل یک آرایه با کلید responseObj میباشد.

getTopHotelInfo() {
        const params = [];
        params.push({code: 'dateType', name: 'CHECKIN'});
        params.push({code: 'fromDate', name: '2018-01-01'});
        params.push({code: 'toDate', name: '2019-01-01'});
        params.push({code: 'topN', name: 10});
        this.dashboardServiceHandler.getTopHotelInfo([], params).subscribe(
          hotels => {
            console.log(hotels);
            this.hotelInfo = hotels.responseObj;
         });
      }

حال ngFor را روی hotelInfo اجرا کنید. باید مطابق پاسخ شما کار کند.

مثال :

let obj = {
      responseObj: [
        { name: 'a' },
        { name: 'b' },
        { name: 'c' }
      ]
    };
    
    console.log(obj.responseObj);

پاسخ شماره ۲

شما میتوانید از لوله keyValue در انگولار استفاده کنید

  <div *ngFor="let hotel of hotelInfo">
    <div *bgFor="let q of hotel | keyvalue>
           {{q.key}} - {{q.value}}
    </div>
  </div>