2017-04-11 13 views
0

私はボードを見て、多くのサイトで問題を解決できませんでした。Angular2 Observable Observable、サービス中のオブジェクトを介して介入するとエラーが発生します

問題はすでに議論されていますが、私のコードでは何も問題ないようです。 だから!まず、私のミドルウェアによって生成JSONはそうのようなものです:あなたが見ることができるように、私は(私の角度アプリで記述されている)主な目的は、temoinオブジェクトを含むsignalementある2つのオブジェクトを持っている

{ 
    "uuid": "5c5260ec-5bcd-451a-ad68-57eb9572c185", 
    "latitude": 41, 
    "longitude": 1, 
    "temoin": { 
    "numeroDeTelephone": 342391, 
    "nom": "bruce", 
    "prenom": "wayne", 
    "sexe": "m", 
    "age": 12, 
    "taille": 150, 
    "poids": 62, 
    "groupeSanguin": "a+" 
    } 
} 

Signalement

import { TemoinObjet } from './temoin.objet'; 

export class Signalement{ 
    public uuid: String; 
    public latitude: any; 
    public longitude: any; 
    public temoin: TemoinObjet;  
} 

Temoin

export class TemoinObjet{ 
    public telephone: Number; 
    public prenom: String; 
    public nom: String; 
    public sexe: String; 
    public age: Number; 
    public taille: Number; 
    public poids: Number; 
    public groupeSanguin: String; 
} 

私がデータを取得することを意図したサービスにコンポーネントでの約束からの切り替え:

import { Http, Response } from '@angular/http'; 
import { Injectable } from '@angular/core'; 

import { Observable } from 'rxjs/Rx'; 
import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/map'; 

import { Signalement } from '../domain/objets/signalement.objet'; 
import { TemoinObjet } from '../domain/objets/temoin.objet'; 

@Injectable() 
export class SignalementService{ 
    private urlRef: string = 'http://localhost:8080/Asklepios-1.0/ws/signalement'; 

    constructor(private http: Http) { 
    } 

    recupererSignalements():Observable<Signalement[]>{ 
     return this.http.get(this.urlRef).map((res:Response) => res.json()); 
    } 

    get(uuidARetrouver: String, liste:any) : Signalement{ 
     return liste.find(s => s.uuid === uuidARetrouver); 
    } 
} 

私は」私はObservableを返すメソッドrecupererSignalements()

私のコンポーネントでは、同じ名前のメソッドを作成し、ngOnInitで呼び出しました。ここでは、完全なコンポーネントです:

私が私の見解で情報を表示する signalements配列を反復処理したい行うのが、毎回私はエラー Error: Error trying to diff '[object Object]' at DefaultIterableDiffer.diffを得れば
import { Component, OnInit } from '@angular/core'; 
import { Signalement } from './domain/objets/signalement.objet'; 
import { SignalementService } from './services/signalement.service'; 
import { TemoinObjet } from './domain/objets/temoin.objet'; 
import { Observable } from 'rxjs/Rx'; 

@Component({ 
    selector: 'liste-signalement', 
    templateUrl: './list_signalement.html', 
    providers: [SignalementService] 

}) 

export class ListSignalementsComponent implements OnInit { 
    signalements: Signalement[]; 

    constructor(private signalementService: SignalementService){ 
    } 

     ngOnInit(){ 
      this.recupererSignalements(); 
      console.log(this.signalements); 
      } 

      recupererSignalements(){ 
       this.signalementService.recupererSignalements().subscribe(donnees => this.signalements = donnees,()=>console.log("Fail"),()=>console.log("Done : "+this.signalements)); 
      } 
} 

*ngForを使用する場合は、私が代わりに参照してください。

Error: Cannot find a differ supporting object '[object Object]' of type 
'object'. NgFor only supports binding to Iterables such as Arrays. at 
NgForOf.ngOnChanges. 

ここでは、ビューの:

<ul> 
    <li *ngFor="let signalement of signalements"> 
     {{signalement.uuid}} 
    </li> 
</ul> 

私はasyncpipeを試みました。これを使用してもエラーはなくなりますが、私の見解では何も見えません。

+0

これを変更してみてください。この変更を試してみてください:this.ttp.get(this.urlRef).map((res:Response)=> res.json()); => res.json()) .do(data => console.log(JSON.stringify(data));これには: 'return this.http.get(this.urlRef) があります。 )); ' それが返すものを参照してください...(まあ、私はコメントセクションのコードを書式設定できないと思います...あなたがこの大丈夫を読むことができれば幸いです。) – DeborahK

+0

また、これらのうちの1つを返すことを期待していますか?またはこれらの配列?このコードは配列を意味しています: 'Observable ' – DeborahK

+0

実際に配列が必要です。 stringifyには別のエラーがあります:TypeError:this.http.get(...)。map(...)。doは関数ではありません また、私がsubscribeでconsole.logを実行すると、これ: オブジェクト{UUID: "5c5260ec-5bcd-451A-ad68-57eb9572c185"、緯度:41、経度:1、temoin:オブジェクト} 緯度: 経度: 1 temoin : オブジェクト uuid : 「5c5260ec-5bcd-451a-ad68-57eb9572c185」 __proto__ : オブジェクト – raik

答えて

2

ここで問題となるのは、ngForは配列を期待していることです - 角度2+の世界ではng-repeatと同等ですが、多くのエッジケースを考慮する必要性を排除する配列でのみ動作するように設計されていますng-repeat (オブジェクトのような)あなたのケースでは反復不可能なものを繰り返します。

もしあなたが単に感嘆符のリストをレンダリングしようと思っているのであれば、1つの感嘆符は配列の中にある必要があります。あるSignalementのプロパティを繰り返し処理しようとしている場合は、オブジェクトを 'ngx-pipes'ライブラリの「keys」パイプなどのキー配列に変換するパイプを記述する必要があります。

関連する問題