2017-04-24 156 views
0

你好我試圖的JSON對象到一個打字原稿類以改變陣列。然而,每一次我嘗試將Json對象屬性分配給打字稿屬性時,該方法似乎都會崩潰。打字稿JSON對象轉換成打字原稿類

打字稿接口

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

打字稿方法

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 
} 

地圖服務

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); 
} 

我研究這個問題,並試圖以應用整數投,但它似乎沒有不工作。任何建議都會很棒。

+2

這些都不是「JSON對象」,但JavaScript對象。拋出任何異常? – zerkms

+4

你想分配屬性沒有值的變量,寫'讓標記:標記= {}',而不是 –

+0

沒有拋出異常出奇 – RyeGuy

回答

2

正如毛波佩在他的評論中指出的,您要訪問的是沒有值的變量的特性。

changeToMarkers(points: Array<{latitude: number, longitude: number}>) { 
    this.markers = entries.map(({latitude: lat, longitude: lng}) => ({ 
    lat, 
    lng 
    })); 

    console.log(this.markers); 
} 

由於反序列化的緯度和經度表示已經是兼容的數值,所以不需要數字轉換。

+0

好吧。現在實施您的解決方案..... – RyeGuy

+0

它沒有達到console.log(this.markers)語句。 – RyeGuy

+1

@RayGuy會發生什麼?它是否達到了訂閱?注意爲了約定,我稍微改了一些名字,一定要更新你的模板(或者改回名字); –

1

試試這個:

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); 
} 

它不像Aluan哈達德的優雅,但它應該讓你決定此時它是打破如果由於某種原因,這仍然不能正常工作,伐木在循環之前有一些數組,標記被推之前,以及這個標記之後,以確定問題的確切位置。