找不到“object”类型的不同支持对象“[object Object]”。仅支持在从 JSON 文件读取和解析数据时绑定到 Iterables
Posted
技术标签:
【中文标题】找不到“object”类型的不同支持对象“[object Object]”。仅支持在从 JSON 文件读取和解析数据时绑定到 Iterables【英文标题】:Can't find differ supporting object '[object Object]' of type 'object'. only supports binding to Iterables while reading & parsing data from JSON file 【发布时间】:2021-08-23 08:29:44 【问题描述】:他的问题与 Ionic Angular 有关。根据我的需要适当地读取解析和显示数据。
我有一个 cdata.json 文件,我正在通过服务类文件读取数据并将其传递到要显示的前端 html 文件:
c_data.json
"categories": [
"c_id": "C01",
"c_name": "Medical Supplies[non-prescription]",
"c_description": "Medical supplies needed during general cases of illness, like
diahorrea, head-ache, weakness & fatigue, sleeplessness, heat-rashes, allergies etc.",
"icon": "pill",
"profilePic": ""
,
"c_id": "C02",
"c_name": "Medical Supplies[prescription]",
"c_description": "Medical supplies needed during more complicated cases of chronic
illnesses that require doctors supervision, prescription and prescribed medicine. You
would be required to upload necessary documents to either file a requirement or
request the same from another member.",
"icon": "pill",
"profilePic": ""
,
..... ..
.... .
...
.
]
可注入服务类文件:
export class CategoryData
data: any;
constructor(public http: HttpClient)
loadCategories(): any
if (this.data)
return of(this.data);
else
return this.http.get('assets/data/cat_data.json')
.pipe(map(this.processData, this));
processData(data: any)
this.data = data;
// loop through each day in the schedule
this.data.categories.forEach((category: any) =>
if (category)
console.log('Fetched');
else
console.log('Incapable to fetch category data');
);
return this.data;
getCategories()
return this.loadCategories();
我尝试绑定的 HTML 的标记:
<ion-grid fixed>
<ion-row>
<ion-col size="12" size-md="6" *ngFor="let cat of categories">
<ion-card class="category-card">
<ion-card-header>
<ion-item detail="false" lines="none" class="category-item" routerLink="/app/tabs/categories/category-details/cat.id">
<ion-avatar slot="start">
<img [src]="cat.profilePic" [alt]="cat.name + ' profile picture'">
</ion-avatar>
<ion-label>
<h2>cat.name</h2>
<p>cat.title</p>
</ion-label>
</ion-item>
</ion-card-header>
<ion-card-content>
<ion-list lines="none">
<ion-item detail="false" routerLink="/app/tabs/categories/category-details/cat.c_id">
<ion-label>
<h3>About cat.c_name</h3>
</ion-label>
</ion-item>
</ion-list>
</ion-card-content>
</ion-card>
</ion-col>
</ion-row>
</ion-grid>
各自的打字稿:
export class CategoryListPage
categories: any;
constructor(public catData: CategoryData)
ionViewDidEnter()
this.catData.getCategories().subscribe((categories: any) =>
this.categories = categories;
);
控制台中的错误信息:
找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如 Arrays。 在 NgForOf.ngDoCheck (common.js:4841) 在 checkAndUpdateDirectiveInline (core.js:31913)
如果我检查,类别数据会很好地获取。 categories : Array(9) 当你展开它时,数据就在那里。 那么这里有什么问题。这不是可迭代的吗?什么意思?
我尝试过的替代方法:
在服务类中:
cdata:any[];
.....
....
..
.
...
.
processData(data: any):Observable<any>
this.data = data;
// loop through each day in the schedule
this.data.categories.forEach((category: any) =>
if (category)
console.log('Fetched');
this.cdata.push(category);
else
console.log('Incapable to fetch category data');
);
return this.data;
getCategories()
return this.loadCategories();
在html标记的.ts文件中:
export class CategoryListPage
categories: any[];
constructor(public catData: CategoryData)
ionViewDidEnter()
this.catData.getCategories().subscribe((categories: any) =>
this.categories = categories;
);
这会引发错误。像,无法实现未定义的方法 .push()。还有更多...
期待中的交易
【问题讨论】:
this.http.get 返回一个对象。你很难理解你的问题的原因是因为你把任何地方都放了。换成实际类型,你就会明白 具体在哪里?? @misha130 【参考方案1】:乍一看,您的类别看起来像是一个数组。所以代码应该定义一个 array 任意:any[]
。
类似这样的:
export class CategoryListPage
categories: any[];
constructor(public catData: CategoryData)
ionViewDidEnter()
this.catData.getCategories().subscribe((categories: any[]) =>
this.categories = categories;
);
一个数组会按照您的错误消息的定义使其“可迭代”。
【讨论】:
嗨@DeborahK 我根据建议编辑了类别列表页面的代码隐藏。我现在有,类别:any[]=[];作为类级别的变量。但是我不能使用, catData.getCategories 它给出了错误 --> 预期的 0 类型参数但得到了 1。这是因为 getCategories() 方法只返回 loadCategories() ..... 希望你明白, case-scenario 是如何...所有的问题都在这一行 --> this.data.forEach((category: Category) => of the processData() of the category-data.ts service .. . 我创建了这个 stackblitz ---> stackblitz.com/edit/ionic-6h9vwa 目前它显示找不到包 rxJS [虽然它在那里] 如果有人可以让这个运行并绑定并显示数据类别标签页,这对我来说就足够了。那就够了! @deborahk 我没用过离子。它需要Angular v5吗? (Angular 目前在 v12 上)此外,它似乎正在尝试安装 RxJS 7。AFAIK,RxJS 7 尚未与 Angular v12 兼容(并且绝对与 Angular v5 不兼容)。 而且上面的代码有错误。 getCategories 后面不应有通用参数。我在上面更正了。 另一种选择,如果问题不在于代码的 ionic 部分,请创建一个默认的 Angular stackblitz 并将有问题的代码与示例 UI 一起放入其中以查看结果(或只是一个控制台。日志()。【参考方案2】:问题是您没有指定对象类型。首先根据你的 json 返回结果创建一个数据模型,并使用该数据对象类型而不是任何类型。
例子:-
export class category
c_id: string;
c_name: string ;
c_description: string[];
icon: string;
profilePic: string
data: category[];
processData(data)
this.data = data;
// loop through each day in the schedule
this.data.categories.forEach((category: category) =>
if (category)
console.log('Fetched');
else
console.log('Incapable to fetch category data');
);
return this.data;
【讨论】:
@hash-dew 我最初使用'any',因为它是一种动态类型,可以让我的工作更轻松。顺便说一句,我试过你的东西。现在我的代码有 2 个错误,这一行 --> this.data.categories.forEach((category: any) 类型 Category[] 上不存在属性类别。作为替代,我直接尝试了 this.data.forEach(.. .....因为我的 c_data.json 毕竟只有 1 个数组。它给了我错误 ---> this.data.forEach 不是函数 你能在stackblitz中分享你的代码吗?所以我可以看看,让你知道该怎么做。可能模型与您的数据不匹配。 好的,会尝试这样做@hash-dew 会通知 看看这个 --> stackblitz.com/edit/ionic-kjal1e@hash-dew 你可能需要在那里做一些整理(TS 文件中引用的依赖项和路径)我很抱歉;不习惯为 ionic 创建 stackblitzes。但是我在主要项目中的全部内容也都在那里,希望您理解,让我知道您需要仔细查看的任何部分的解释或详细信息;将提供 目前它在 stackblitz 中显示“安装包 rxJs”,@hash-dew以上是关于找不到“object”类型的不同支持对象“[object Object]”。仅支持在从 JSON 文件读取和解析数据时绑定到 Iterables的主要内容,如果未能解决你的问题,请参考以下文章
错误:找不到类型为“object - Angular 7”的不同支持对象“[object Object]”[重复]
找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如 Arrays.(AngularFireList)
找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如带有异步管道的数组
Angular 4 找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如 Arrays
找不到“object”类型的不同支持对象“[object Object]”。仅支持在从 JSON 文件读取和解析数据时绑定到 Iterables
找不到“object”类型的不同支持对象“[object Object]”。 --> 要在表格中显示的 VirusTotal JSON