2017-02-08 3 views
0

모델 구성 요소 :조작 및 서비스 응답이되지만 정의되지 않은

import { Component, OnInit, AfterContentInit } from '@angular/core'; 
import { Model } from '../model'; 
import { EdmundsAPIService } from '../edmunds-api.service'; 
import { ActivatedRoute } from '@angular/router'; 
@Component({ 
    selector: 'app-models', 
    templateUrl: './models.component.html', 
    styleUrls: ['./models.component.css'] 
}) 
export class ModelsComponent implements OnInit, AfterContentInit { 
public models: Model[]; 
errorMessage: string; 

    constructor(private route: ActivatedRoute, 
       private _EdmundsAPIService: EdmundsAPIService) {} 

    getModels(): void { 
    this._EdmundsAPIService.getModels(this.route.snapshot.params[ 'data' ]) 
     .subscribe(
     models => this.models = models, 
     error => this.errorMessage = <any>error); 
    } 

    ngOnInit() { 
    this.getModels(); 
    console.log(this.models); 
    } 

EdmundsAPIService :

getModels(makeNiceName: number): Observable<Model[]> { 
    return this.http.get('REDACTED') 
    .map(res => res.json()) 
    .catch(this.handleError); 
    } 

내가 액세스 'this.models'위해 내 ngOnInit (또는 다른 라이프 사이클 후크)에에에 노력하고 있습니다 내 JSON 응답을 정렬하고 필터링하십시오. 그러나 내 console.log 반환 undefined

답변

1
getModels(): void { 
    this._EdmundsAPIService.getModels(this.route.snapshot.params[ 'data' ]) 
     .subscribe(
      (models: Model[]) => { 
       this.models = models 

       //THIS IS WHERE YOU MANIPULATE YOUR DATA 
       console.log(this.models) // IF SERVICE IS WORKING THIS WILL NOT BE UNDEFINED 
      }, 
      (error: any) => this.errorMessage = error 
    ); 
} 
+0

다음은'console.log' 아래에 추가하려고했습니다 : for (vari = 0; this.models.models.length; i ++) { console.log (this.models.models [i]); } ' 오류가 발생했습니다. – Moshe

1

이 결과는 console.log 시도 할 때 비동기 호출입니다, 데이터가 아직 검색되지 않았습니다.

getModels(): void { 
    this._EdmundsAPIService.getModels(this.route.snapshot.params[ 'data' ]) 
     .subscribe(
     models => { 
     this.models = models; // values set 
     console.log(this.models); // values available! 
     }); 
    } 
+0

내가 값을 가지고 확신, 이것은 문제가되지 않습니다 :

ngOnInit() { this.getModels(); // executing // logging before above function has finished executing console.log(this.models); } 

당신이 가입 내부에 console.log를 이동 할 경우에, 당신은 당신이 값이 있는지 확인 될 것 . console.log는 값을 검색하는 '테스트 함수'였습니다. 내가 뭘 하려는지 JSON 응답을 얻는 것입니다 -> 모델 개체에 넣어 정렬, 필터 및 구성 요소에서 조작 할 수 있습니다. – Moshe

+0

다른 말로하면, {{data | json}} html 템플릿에서, 나는 그것을 TS 구성 요소에서 조작하고 싶습니다. 어쩌면 내가 그 구성 요소에서 할 수 없어, 그건 괜찮아요, 난 내 HTML 템플릿에 저장하고 순수한 자바 스크립트 JSON 조작을 신경 쓰지 않아 – Moshe

+0

물론 당신은 당신의 구성 요소에서 그것을 조작 할 수 있습니다. 당신은 즉시 무엇인가를해야합니까, 아니면 단지 시작 지점으로보기 위해 렌더링하고 싶습니까? – Alex