尝试比较“[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
运算符将输出从一种形式映射到另一种形式。
我在尝试加载 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
运算符将输出从一种形式映射到另一种形式。