Arrays 角度2可观察到,通过服务中的对象进行交互会产生错误
我已经在董事会和许多网站上查看过,但找不到解决我问题的方法 这个问题已经讨论过了,但我的代码似乎没有任何效果。 所以首先,我的中间件生成的JSON如下:Arrays 角度2可观察到,通过服务中的对象进行交互会产生错误,arrays,angular,angular2-services,angular2-observables,Arrays,Angular,Angular2 Services,Angular2 Observables,我已经在董事会和许多网站上查看过,但找不到解决我问题的方法 这个问题已经讨论过了,但我的代码似乎没有任何效果。 所以首先,我的中间件生成的JSON如下: { "uuid": "5c5260ec-5bcd-451a-ad68-57eb9572c185", "latitude": 41, "longitude": 1, "temoin": { "numeroDeTelephone": 342391, "nom": "bruce", "prenom": "way
{
"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;
}
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;
}
Temoin:
import { TemoinObjet } from './temoin.objet';
export class Signalement{
public uuid: String;
public latitude: any;
public longitude: any;
public temoin: TemoinObjet;
}
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);
}
}
完成后,我想迭代信号元素
数组以在视图中显示信息,但每次我都会收到错误error:error试图在DefaultIterableDiffer.diff处区分“[object object]”时出错。使用*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>
-
{{signalement.uuid}
我尝试了异步管道
。使用它,我不会再出现错误,但在我的视图中看不到任何东西。这里的问题是,ngFor需要一个数组–尽管它相当于Angular 2+世界中的ng repeat,但它被设计为只在数组上运行,这样就不需要考虑ng repeat所涵盖的许多边缘情况,包括在非iterables上迭代(在您的情况下,例如对象)
如果您只是想呈现一个SignalElement列表,那么一个SignalElement只需要位于数组中。如果您试图迭代一个SignalElement的属性,则需要编写一个管道,将对象转换为键数组,例如“键”“ngx pipes”库中的管道。这里的问题是,ngFor需要一个数组–尽管它相当于Angular 2+世界中的ng repeat,但它被设计为仅在数组上运行,这样就不需要考虑ng repeat所涵盖的许多边缘情况,包括迭代不可编辑的对象(如您的情况下的对象)
如果您只是想呈现一个SignalElement列表,那么一个SignalElement只需要位于数组中。如果您试图迭代一个SignalElement的属性,则需要编写一个管道,将对象转换为键数组,例如“键”“ngx pipes”库中的管道。尝试更改:返回this.http.get(this.urlRef).map((res:Response)=>res.json());返回this:返回this.http.get(this.urlRef).map((res:Response)=>res.json()).do(data=>console.log(json.stringify(data));
并查看返回的内容。。。(好吧,我想我无法格式化注释部分中的代码…希望您能阅读此内容。)此外,您是否希望返回其中一个?还是一个数组?此代码暗示一个数组:Observable
我确实希望得到一个数组。对于stringify,我得到了另一个错误:TypeError:this.http.get(…).map(…).do不是一个函数,当我做一个控制台时也是如此。在订阅中,我得到以下信息:Object{uuid:“5c5260ec-5bcd-451a-ad68-57eb9572c185”,纬度:41,经度:1,temoin:Object}纬度:41经度:1 temoin:Object uuid:“5c5260ec-5bcd-451a-ad68-57eb9572c185”proto:Objectdo需要另一个导入{Observable}从'rxjs/Observable';导入'rxjs/add/operator/do';尝试更改:返回this.http.get(this.urlRef).map((res:Response)=>res.json());到:返回this.http.get(this.urlRef).map((res:Response)=>res.json()).do(data=>console.log(json.stringify(data));
并查看返回的内容。。。(好吧,我想我无法格式化注释部分中的代码…希望您能阅读此内容。)此外,您是否希望返回其中一个?还是一个数组?此代码暗示一个数组:Observable
我确实希望得到一个数组。对于stringify,我得到了另一个错误:TypeError:this.http.get(…).map(…).do不是一个函数,当我做一个控制台时也是如此。在订阅中,我得到以下信息:Object{uuid:“5c5260ec-5bcd-451a-ad68-57eb9572c185”,纬度:41,经度:1,temoin:Object}纬度:41经度:1 temoin:Object uuid:“5c5260ec-5bcd-451a-ad68-57eb9572c185”proto:Objectdo需要另一个导入{Observable}从'rxjs/Observable';导入'rxjs/add/operator/do';