2017-10-19 6 views
0

각도 4 및 서버 측 렌더링부터 시작하고 현재는 외부 API 중 일부 데이터를 가져 오는 개념 증명을 얻으려고합니다. 이 API는 Json 객체를 반환합니다.각도 4로 데이터를 가져 오는 중

사이트는 꽤 잘 렌더링되었지만 이제는 렌더링되지 않은 데이터를 가져 오는 호출이 포함되었으므로 내가 얻고있는 응답이 내가 얻는 것으로 보이지 않습니다. app.components.ts에서

나는 추가 :

private apiUrl= 'https://myapi/Users'; 
    data: any = {}; 

    constructor(private http: Http){ 
    this.getUsers(); 
    this.getData(); 
    } 

    getData(){ 
    let res=this.http.get(this.apiUrl).map((res: Response)=>res.json()); 
    console.log("result:",res) 
    return res; 
    } 

    getUsers(){ 
    this.getData().subscribe(data=>{ 
     this.data=data; 
    }) 
    } 

이제, 그러나 나는이 무엇입니까, 내가 콘솔에서 HTTP 호출의 결과를 인쇄하고있는 GetData 메서드에서 볼 수 :

Observable { 
    _isScalar: false, 
    source: Observable { _isScalar: false, _subscribe: [Function] }, 
    operator: MapOperator { project: [Function], thisArg: undefined } } 

왜 json 개체가 표시되지 않습니까? 그게 이유가 될 수 있니?

+0

맞습니다. 당신의'res'는 실제로'Observable'이지 데이터 자체는 아닙니다. Observables은 비동기식입니다. 실제 데이터를 보려면'subscribe()'에서'console.log'를 사용하십시오. 콜백 (call back) 기능을 사용하거나,'map' 콜백 함수 안에서 볼 수 있습니다. – CozyAzure

답변

4

getUsers()가 내부적으로 getData를 호출하므로 생성자에서 다시 호출 할 필요가 없습니다. 또한

constructor(private http: Http){ 
    this.getUsers(); 
    //remove this line this.getData(); 
} 

하여 실제 데이터를 볼 방법을 구독 내부 CONSOLE.LOG을 배치, 아래의 댓글이 말했듯이,이 안에 당신의 메서드 호출을하지 않는 것이 좋습니다

getUsers(){ 
    this.getData().subscribe(data=>{ 
     this.data=data; 
     console.log(this.data); 
    }) 
    } 

편집 생성자, ngOnit을 구현하도록 구성 요소를 만들고 내부에 메서드를 추가하십시오.

+1

추가하려면 ... 생성자에서 비동기 작업을 수행하지 않는 것이 좋습니다. 대신 ngOnInit 라이프 사이클 후크 방법을 사용하십시오. 또한 데이터 액세스를 자체 서비스로 이동하는 것이 일반적으로 권장됩니다. 여기에 완전한 예제가 있습니다 : https://github.com/DeborahK/Angular-GettingStarted (APM-Final 폴더에 있음) – DeborahK

관련 문제