尝试比较“[object Object]”时出错。 IONIC 4 只允许数组和迭代

Error trying to diff '[object Object]'. Only arrays and iterables are allowed IONIC 4

我在尝试加载 ion-items 的列表时收到上述错误(标题)。我很感激一些帮助,因为我是 Ionic 的新手...谢谢大家的宝贵时间。

我的ts页面如下:

array_dept0: any = [];

ionViewWillEnter(){
    this.storage.get('session_storage').then((res)=>{
      this.anggota = res;
      this.username = this.anggota.username;
      this.loadDept0(this.username);
    });

loadDept0(username){
    return new Promise(resolve => {
        let body = {
        aksi : 'getCompanyDept0',
        username : username
        };

        this.postPvdr.postData(body, 'proses-api.php').subscribe(data_dept0 => {
        this.array_dept0 = data_dept0;
        console.log('My data_dept0',data_dept0)
        resolve(true);
        });
    });
  }

proses-api.php

elseif($postjson['aksi']=='getCompanyDept0'){
    $data = array();
    $query = mysqli_query($mysqli, "SELECT * FROM master_user WHERE username = '$postjson[username]' ORDER BY user_id DESC LIMIT 1");

    while($row = mysqli_fetch_array($query)){

      $company_id = $row['company_id'];

      $query2 = mysqli_query($mysqli, "SELECT * FROM company_dept0 WHERE company_id = '$company_id' ORDER BY company_id DESC");
      
      while($row2 = mysqli_fetch_row($query2)){

        $row_array['company_dept0'] = $row2['name'];

      }
      
    }

    if($query) $result = json_encode(array('success'=>true, 'array_dept0'=>$row_array));
    else $result = json_encode(array('success'=>false));

    echo $result;

  }

console.log 显示如下:

My data_dept0 {success: true, array_dept0: Array(5)}
array_dept0: Array(5)
0: {company_dept0: "Educación Infantil"}
1: {company_dept0: "Educación Primaria"}
2: {company_dept0: "Educación Secundaria (ESO)"}
3: {company_dept0: "Bachillerato"}
4: {company_dept0: "Personal del centro"}

最后,html:

<ion-list>
      <ion-item *ngFor="let item of array_dept0"> {{item.company_dept0}} </ion-item>
</ion-list>

array_dept0实际上是data_dept0对象里面的一个属性。您需要将变量分配给 array_dept0 数组而不是 data_dept0 对象。

this.postPvdr.postData(body, 'proses-api.php').subscribe(data_dept0 => {
  this.array_dept0 = data_dept0['array_dept0'];      // <-- access property here
  console.log('My data_dept0',data_dept0)
  resolve(true);
});

此外,使用 RxJS from 将 Promise 转换为 Observable 在主观上比将 observable 转换为 Promise 更容易。尝试以下

ionViewWillEnter() {
  from(this.storage.get('session_storage')).pipe(
    switchMap(res => {                           // <-- switch from one observable to another
      this.anggota = res;
      this.username = this.anggota.username;
      return this.loadDept0(this.username);      // <-- map the the HTTP request
    })
  ).subscribe(
    array_dept0 => { this.array_dept0 = array_dept0 },
    error => { }
  );
});

loadDept0(username): Observable<any> {
  let body = {
    aksi : 'getCompanyDept0',
    username : username
  };

  return this.postPvdr.postData(body, 'proses-api.php').pipe(   // <-- return the observable
    map(data_dept0 => return data_dept0['array_dept0'])         // <-- map to the `array_dept0` property
  );
}

我正在使用 RxJS switchMap operator to switch from one observable to another and map 运算符将输出从一种形式映射到另一种形式。