【发布时间】:2017-04-11 21:40:22
【问题描述】:
我查看了公告板和许多网站,但找不到解决问题的方法。
这个问题已经讨论过了,但我的代码似乎没有任何效果。 所以!首先,我的中间件生成的JSON是这样的:
{
"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+"
}
}
如您所见,我有两个对象(在我的 Angular 应用程序中进行了描述),主要对象是 signalement,其中包含一个 temoin 对象。
信号:
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;
}
我从组件中的 promise 切换到旨在获取数据的服务:
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 中调用它。这是完整的组件:
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));
}
}
完成后,我想遍历signalements 数组以在我的视图中显示信息,但每次我收到错误Error: Error trying to diff '[object Object]' at DefaultIterableDiffer.diff。当使用 *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。使用它我不会再出现错误,但在我的视图中看不到任何东西。
【问题讨论】:
-
尝试改变这个:return this.http.get(this.urlRef).map((res:Response) => res.json());对此:
return this.http.get(this.urlRef) .map((res:Response) => res.json()) .do(data => console.log(JSON.stringify(data)));看看返回的内容...(好吧,我想我无法格式化 cmets 部分中的代码...希望您可以阅读。) -
另外,您是否希望获得其中之一?还是这些数组?此代码暗示一个数组:
Observable<Signalement[]> -
我确实期待一个数组。对于 stringify,我遇到了另一个错误: TypeError: this.http.get(...).map(...).do is not a function 另外,当我在订阅中执行 console.log 时,我得到了这个: Object { uuid:“5c5260ec-5bcd-451a-ad68-57eb9572c185”,纬度:41,经度:1,temoin:对象} 纬度:41 经度:1 temoin:对象 uuid:“5c5260ec-5bcd-451a-ad68-57eb9572c185”proto : 对象
-
确实需要另一个导入。
-
从 'rxjs/Observable' 导入 { Observable };导入'rxjs/add/operator/do';
标签: arrays angular angular2-services angular2-observables