我一直在努力解析和使用从JSON查询/ api调用返回的数据。我不确定自己出了问题的确切位置,我觉得自己已经连续几天盘旋答案,追逐各种错误代码,例如:
“找不到'iterableDiff'管道支持对象”
“通用TYpe数组需要一个参数”
JSON解析错误,并确定其他错误
我假设我只是错误的修复组合。
因此,这里有一些陷阱和要寻找的东西的摘要。
首先检查api调用的结果,结果可能是对象,数组或对象数组的形式。
我不会过多地介绍它,足以说出OP原始的不可迭代错误通常是由您尝试迭代对象而不是数组引起的。
这是我的一些调试结果,显示了数组和对象的变量
因此,正如我们通常想遍历JSON结果一样,我们需要确保它采用数组形式。我尝试了许多示例,也许知道我现在知道的一些内容实际上可以工作,但是我采用的方法确实是实现管道,而我使用的代码是t.888发布的
transform(obj: {[key: string]: any}, arg: string) {
if (!obj)
return undefined;
return arg === 'keyval' ?
Object.keys(obj).map((key) => ({ 'key': key, 'value': obj[key] })) :
arg === 'key' ?
Object.keys(obj) :
arg === 'value' ?
Object.keys(obj).map(key => obj[key]) :
null;
老实说,我认为让我感到困惑的一件事是缺少错误处理,通过添加“ return undefined”调用,我相信我们现在允许将非预期的数据发送到管道,这显然是在我的情况下发生的。
如果您不想处理管道的参数(并且在大多数情况下,我认为没有必要),则可以返回以下内容
if (!obj)
return undefined;
return Object.keys(obj);
有关创建管道和使用该管道的页面或组件的一些说明
我是否收到有关找不到“ name_of_my_pipe”的错误
在CLI中使用“ ionic generate pipe”命令,以确保正确创建和引用了管道模块。确保将以下内容添加到mypage.module.ts页面。
import { PipesModule } from ‘…/…/pipes/pipes.module’;
(如果您也有自己的custom_module,不确定是否会更改,您可能还需要将其添加到custommodule.module.ts中)
如果您使用“离子生成页面”命令来创建页面,但决定使用该页面作为主页,请记住从app.module.ts中删除页面引用(这是我发布的另一个针对该https:/的答案。/forum.ionicframework.com/t/solved-pipe-not-found-in-custom-component/95179/13?u=dreaser
在我寻找答案的地方,有很多方法可以在html文件中显示数据,而我对这些差异的理解还不够。在某些情况下,您可能会发现一种更好的用法。
<ion-item *ngFor="let myPost of posts">
<img src="https://somwhereOnTheInternet/{{myPost.ImageUrl}}"/>
<img src="https://somwhereOnTheInternet/{{posts[myPost].ImageUrl}}"/>
<img [src]="'https://somwhereOnTheInternet/' + myPost.ImageUrl" />
</ion-item>
但是,可以让我同时显示值和键的方法如下:
<ion-list>
<ion-item *ngFor="let myPost of posts | name_of_pip:'optional_Str_Varible'">
<h2>Key Value = {{posts[myPost]}}
<h2>Key Name = {{myPost}} </h2>
</ion-item>
</ion-list>
使API调用看起来像您需要将HttpModule导入到app.module.ts中
import { HttpModule } from '@angular/http';
.
.
imports: [
BrowserModule,
HttpModule,
并且您在从中进行呼叫的页面中需要Http
import {Http} from '@angular/http';
进行API调用时,您似乎可以通过2种不同的方式获取子数据(数组中的对象或数组),两种方法似乎都可以
在通话期间
this.http.get('https://SomeWebsiteWithAPI').map(res => res.json().anyChildren.OrSubChildren).subscribe(
myData => {
或将数据分配给本地变量时
posts: Array<String>;
this.posts = myData['anyChildren'];
(不确定该变量是否需要为数组字符串,但这就是我现在所拥有的。它可以作为更通用的变量工作)
最后一点,没有必要使用内置的JSON库,但是您可能会发现这两个调用很方便将对象从字符串转换为字符串,反之亦然
var stringifiedData = JSON.stringify(this.movies);
console.log("**mResults in Stringify");
console.log(stringifiedData);
var mResults = JSON.parse(<string>stringifiedData);
console.log("**mResults in a JSON");
console.log(mResults);
我希望这些信息汇编可以帮助某人。