2017-04-24 6 views
0

Hallo, ich versuche, ein Array von JSON-Objekten in eine TypeScript-Klasse zu ändern. Die Methode scheint jedoch zu stürzen, wenn ich versuche, einem Typoskript-Attribut ein JSON-Objektattribut zuzuweisen.Typescript, das ein JSON-Objekt in Typescript-Klasse konvertiert

Typoskript Schnittstelle

export interface marker { 
    lat: number; 
    lng: number; 
} 

Typoskript Methode

public markers: marker[]; 

ngOnInit() { 
    this.mapService.GetPhotosById(this.id).subscribe(resultlisting => { 
     this.values = resultlisting; 
     console.log(this.values); //SHOW IN PICTURE 
     this.ChangetoMarkers(this.values); 
    }, error => this.errorMessage = error); 
} 

ChangetoMarkers(someArray: Observable<any[]>) { 

    for (let entry of someArray) { 
     let mark: marker; 
     mark.lat = Number(entry.latitude); //Attempt to convert to number 
     mark.lng = +entry.longitude; //2nd attempt to convert to number 
     this.markers.push(mark); 
    }; 
    console.log(this.markers); //DOES NOT REACH THIS 
} 

Map Service

GetPhotosById(id: string): Observable<any> { 
    return this.http 
     .post(this.config.apiEndpoint + "mapPhotos/" + id) 
     .map(this.extractJson).catch(this.handleErrors); 

}; 
private extractJson(res: Response) { 
    let data = res.json(); 
    return data; 
} 
private handleErrors(error: Response | any) { 
    let errMsg: string; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body.error || JSON.stringify(body); 
     errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
    } else { 
     errMsg = error.message ? error.message : error.toString(); 
    } 
    console.log(errMsg); 
    return Observable.throw(errMsg); 
} 

ich das Thema recherchiert und versucht haben, die interger Guss anzuwenden, aber es scheint nicht zu Arbeit. Irgendwelche Vorschläge wären großartig.

+2

Das sind keine "JSON-Objekte", sondern JavaScript-Objekte. Alle Ausnahmen ausgelöst? – zerkms

+4

Sie versuchen, Eigenschaften einer Variablen, die keinen Wert hat, Eigenschaften zuweisen, schreiben Sie 'let mark: marker = {} 'statt –

+0

Keine Ausnahmen überraschend – RyeGuy

Antwort

2

Wie Mauricio Poppe in seinem Kommentar bemerkte, versuchen Sie, auf die Eigenschaften einer Variablen zuzugreifen, die keinen Wert hat.

Es sind keine Zahlenumrechnungen erforderlich, da die deserialisierten Darstellungen von Längen- und Breitengrad bereits kompatible numerische Werte sind.

+0

Ok, hab es. Implementieren Sie jetzt Ihre Lösung ..... – RyeGuy

+0

Es erreicht nicht die console.log (this.markers) -Anweisung. – RyeGuy

+1

@RyeGuy was passiert? Erreicht es den abonnieren? Hinweis: Ich habe die Namen für die Konvention etwas geändert, achten Sie darauf, Ihre Vorlage zu aktualisieren (oder ändern Sie die Namen zurück;)) –

1

Try this:

ChangetoMarkers(someArray: any[]) { 
    console.log("array",someArray); 
    for (let entry of someArray) { 
     let mark: marker = {lat: entry.latitude, lng: entry.longitude}; 
     console.log("mark", mark); 
     this.markers.push(mark); 
    }; 
    console.log("markers",this.markers); 
} 

Es ist nicht so elegant wie Aluan Haddad, aber es sollte Ihnen bei denen zu bestimmen erlauben Punkt es, wenn aus irgendeinem Grund bricht dies noch nicht, durch die Protokollierung funktioniert someArray vor der Schleife, die Markierungen vor dem Drücken, und this.markers nach genau zu bestimmen, wo das Problem zusammenbricht.

Verwandte Themen