JSON 쿼리 / API 호출에서 반환 된 데이터를 구문 분석하고 사용하려고 시도하면서 머리카락을 찢어 냈습니다. 내가 어디로 잘못 가고 있는지 정확히 모르겠습니다. 나는 며칠 동안 대답을 돌면서 다음과 같은 다양한 오류 코드를 쫓는 것처럼 느낍니다.
" 'iterableDiff'파이프 지원 개체를 찾을 수 없음"
"일반 유형 배열에는 하나의 인수가 필요합니다."
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;
솔직히 저는 '정의되지 않은 반환'호출을 추가하여 오류 처리가 부족하다고 생각합니다. 이제 예상치 못한 데이터를 파이프로 보낼 수 있다고 생각합니다. .
파이프에 대한 논쟁을 다루고 싶지 않다면 (대부분의 경우 필요하지 않다고 생각합니다) 다음을 반환 할 수 있습니다
if (!obj)
return undefined;
return Object.keys(obj);
파이프 및 해당 파이프를 사용하는 페이지 또는 구성 요소를 만드는 데 대한 몇 가지 참고 사항
'name_of_my_pipe'에 대한 오류가 발견되지 않았습니까?
CLI에서 'ionic generate 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 라이브러리를 사용할 필요는 없지만 객체에서 문자열로 변환하는 데이 두 가지 호출이 편리하다는 것을 알 수 있습니다.
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);
이 정보 모음이 누군가에게 도움이되기를 바랍니다.