2017-04-24 2 views
0

안녕하세요, JSON 객체 배열을 TypeScript 클래스로 변경하려고합니다. 그러나이 메소드는 Json 객체 속성을 타이프 스크립트 (titcript) 애트리뷰트에 할당하려고 할 때마다 크래시되는 것처럼 보입니다.Typescript JSON 객체를 Typescript 클래스로 변환

타이프 라이터 인터페이스

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 
} 

내가 문제를 연구 한과 interger 캐스트를 적용하는 시도 있지만하지 않는 것

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 개체"가 아니라 자바 스크립트 개체입니다. 예외가 발생 했습니까? – zerkms

+4

값이없는 변수에 속성을 할당하려고하면 'let mark : marker = {}'를 대신 쓰십시오. –

+0

놀랍게도 예외가 발생하지 않습니다 – RyeGuy

답변

2

Mauricio Poppe가 언급 한 바에 따르면 값이없는 변수의 속성에 액세스하려고합니다.

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

    console.log(this.markers); 
} 

위도 및 경도의 비 직렬화 표현은 이미 호환 가능한 숫자 값이므로 변환 할 필요가 없습니다. 하는 기록함으로써,이 여전히 작동하지 않습니다 어떤 이유로 경우 파괴되는 포인트

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 하다드의 한 우아한되지 않지만, 그것은 당신이 결정할 수 있도록해야합니다 :

+0

알았어요. 지금 솔루션 구현 ..... – RyeGuy

+0

console.log (this.markers) 문에 도달하지 않습니다. – RyeGuy

+1

@ RyeGuy 어떻게됩니까? 그것은 구독에 도달합니까? 참고 컨벤션을 위해 이름을 약간 변경 했으므로 템플릿을 업데이트하십시오 (또는 이름을 다시 변경하십시오). –

1

이 시도 루프 앞의 someArray, 푸시되기 전의 표시 및 this.markers를 사용하여 문제가 어디에서 파손되었는지를 정확하게 판별 할 수 있습니다.

관련 문제