Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 角度2可观察到,通过服务中的对象进行交互会产生错误_Arrays_Angular_Angular2 Services_Angular2 Observables - Fatal编程技术网

Arrays 角度2可观察到,通过服务中的对象进行交互会产生错误

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

我已经在董事会和许多网站上查看过,但找不到解决我问题的方法

这个问题已经讨论过了,但我的代码似乎没有任何效果。 所以首先,我的中间件生成的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;    
}
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';