私は、JSONクエリ/ API呼び出しから返されたデータを解析して使用しようとすることで頭を悩ませてきました。私はどこが間違っていたのか正確にはわかりません、私は何日も答えを丸めていて、次のようなさまざまなエラーコードを追跡しているように感じます:
「 'iterableDiff'パイプサポートオブジェクトが見つかりません」
「ジェネリックTYpe配列には1つの引数が必要です」
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;
正直に言って、私が得た原因の1つはエラー処理の欠如だったと思います。'returnundefined '呼び出しを追加することで、予期しないデータをパイプに送信できるようになりました。これは明らかに私の場合に発生していました。 。
パイプへの引数を処理したくない場合(そして、ほとんどの場合それが必要だとは思わない場合)、次のコードを返すだけです。
if (!obj)
return undefined;
return Object.keys(obj);
パイプとそのパイプを使用するページまたはコンポーネントの作成に関する注意事項
「name_of_my_pipe」が見つからないというエラーを受け取っていましたか
CLIから 'ionic generate pipe'コマンドを使用して、pipe modules.tsが正しく作成および参照されるようにします。以下をmypage.module.tsページに追加してください。
import { PipesModule } from ‘…/…/pipes/pipes.module’;
(独自のcustom_moduleもある場合、これが変更されるかどうかは不明です。custommodule.module.tsに追加する必要がある場合もあります)
'ionic generate page'コマンドを使用してページを作成したが、そのページをメインページとして使用することにした場合は、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呼び出しを行うと、子データ(配列内のオブジェクトまたは配列)に到達できるようです。
通話中のどちらか
this.http.get('https://SomeWebsiteWithAPI').map(res => res.json().anyChildren.OrSubChildren).subscribe(
myData => {
または、ローカル変数にデータを割り当てるとき
posts: Array<String>;
this.posts = myData['anyChildren'];
(その変数が配列文字列である必要があるかどうかはわかりませんが、それが現在私が持っているものです。より一般的な変数として機能する可能性があります)
そして最後の注意として、組み込みのJSONライブラリを使用する必要はありませんでしたが、これらの2つの呼び出しはオブジェクトから文字列への変換やその逆に便利です。
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);
この情報の集まりが誰かを助けてくれることを願っています。