Saya telah merobek rambut saya dengan mencoba mengurai dan menggunakan data yang dikembalikan dari permintaan JSON / panggilan api. Saya tidak yakin persis di mana saya salah, saya merasa seperti saya telah melingkari jawaban selama berhari-hari, mengejar berbagai kode kesalahan seperti:
"Tidak dapat menemukan objek pendukung pipa 'iterableDiff'"
"Generic TYpe Array membutuhkan satu argumen"
Kesalahan JSON parsing, dan saya yakin orang lain
Saya berasumsi saya baru saja salah kombinasi perbaikan.
Jadi, inilah sedikit ringkasan tentang gotcha dan hal-hal yang harus dicari.
Pertama-tama periksa hasil panggilan api Anda, hasil Anda mungkin dalam bentuk objek, array, atau array objek.
saya tidak akan membahasnya terlalu banyak, cukup untuk mengatakan Kesalahan asli OP karena tidak dapat diubah umumnya disebabkan oleh Anda mencoba untuk mengulangi objek, bukan Array.
Inilah beberapa hasil debug saya yang menunjukkan variabel array dan objek
Jadi karena kami umumnya ingin mengulangi hasil JSON kami, kami perlu memastikannya dalam bentuk Array. Saya mencoba banyak contoh, dan mungkin mengetahui apa yang saya tahu sekarang beberapa dari mereka sebenarnya akan bekerja, tetapi pendekatan yang saya lakukan adalah dengan mengimplementasikan pipa dan kode yang saya gunakan adalah yang diposting oleh 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;
Jujur saya pikir salah satu hal yang membuat saya kurang penanganan kesalahan, dengan menambahkan panggilan 'kembali tidak terdefinisi' saya percaya kita sekarang memungkinkan data yang tidak diharapkan untuk dikirim ke pipa, yang jelas terjadi dalam kasus saya .
jika Anda tidak ingin berurusan dengan argumen ke pipa (dan lihat saya pikir itu tidak perlu dalam kebanyakan kasus) Anda bisa mengembalikan yang berikut ini
if (!obj)
return undefined;
return Object.keys(obj);
Beberapa Catatan tentang membuat pipa dan halaman atau komponen Anda yang menggunakan pipa itu
adalah saya menerima kesalahan tentang 'name_of_my_pipe' tidak ditemukan
Gunakan perintah 'menghasilkan pipa ion' dari CLI untuk memastikan modul pipa.ts dibuat dan dirujuk dengan benar. pastikan Anda menambahkan yang berikut ke halaman mypage.module.ts.
import { PipesModule } from ‘…/…/pipes/pipes.module’;
(tidak yakin apakah ini berubah jika Anda juga memiliki custom_module Anda sendiri, Anda mungkin perlu menambahkannya ke custommodule.module.ts)
jika Anda menggunakan perintah 'menghasilkan halaman ion' untuk membuat halaman Anda, tetapi memutuskan untuk menggunakan halaman itu sebagai halaman utama Anda, ingatlah untuk menghapus referensi halaman dari app.module.ts (inilah jawaban lain yang saya posting berurusan dengan itu https: / /forum.ionicframework.com/t/solved-pipe-not-found-in-custom-component/95179/13?u=dreaser
Dalam mencari jawaban ada beberapa cara untuk menampilkan data dalam file html, dan saya tidak cukup mengerti untuk menjelaskan perbedaannya. Anda mungkin merasa lebih baik untuk menggunakan satu sama lain dalam skenario tertentu.
<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>
Namun apa yang berhasil yang memungkinkan saya untuk menampilkan nilai dan kuncinya adalah sebagai berikut:
<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>
untuk membuat panggilan API sepertinya Anda perlu mengimpor HttpModule ke app.module.ts
import { HttpModule } from '@angular/http';
.
.
imports: [
BrowserModule,
HttpModule,
dan Anda memerlukan Http di laman tempat Anda menelepon
import {Http} from '@angular/http';
Saat melakukan panggilan API, Anda tampaknya bisa mendapatkan data anak-anak (objek atau array dalam array) 2 cara berbeda, entah itu berfungsi
baik saat panggilan berlangsung
this.http.get('https://SomeWebsiteWithAPI').map(res => res.json().anyChildren.OrSubChildren).subscribe(
myData => {
atau ketika Anda menetapkan data ke variabel lokal Anda
posts: Array<String>;
this.posts = myData['anyChildren'];
(tidak yakin apakah variabel itu perlu menjadi Array String, tapi itulah yang saya miliki saat ini. Mungkin berfungsi sebagai variabel yang lebih umum)
Dan catatan terakhir, itu tidak perlu untuk menggunakan perpustakaan JSON inbuilt namun Anda mungkin menemukan 2 panggilan ini berguna untuk mengkonversi dari objek ke string dan vica sebaliknya
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);
Saya harap kompilasi informasi ini membantu seseorang.