2017-03-05 10 views
0

특정 질문을 이미 확인했지만 여전히 문제를 해결하지 못했습니다. 내가 관찰 가능한을 반환 내 응용 프로그램에서 서비스를 사용하고, 모든이 단계에 괜찮지 만, 내가 데이터를 표시 할 때 아무 일도 발생하지 않습니다 :angular 2 * ngFor 및 Observables Object, 데이터가 표시되지 않음

@Injectable() 
export class DataService { 

    private APIURL = 'http://api.dev/'; 

    constructor(private http: Http) { 
    } 

    _API_getEvents:string = this.APIURL + "getEvents"; 
    getEvents() : Observable<IEvent[]> { 
     return this.http.get(this._API_getEvents) 
     .map((res:Response) => res.json()) 
     .catch(this.handleError); 
    } 

    private handleError (error: Response | any) { 
     // In a real world app, we might use a remote logging infrastructure 
     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.error(errMsg); 
     return Observable.throw(errMsg); 
    } 


} 

이벤트 인터페이스 :

export interface IEvent { 
    id: number; 
    name: string; 
    created_at:Date; 
    update_at:Date; 
} 

과 구성 요소 :

events:IEvent[]; 
//events:any[]; 

    constructor(private _http:Http, private _dataService: DataService) 
    { 
    this._dataService.getEvents() 
    .subscribe(

     function(response) { console.log("Success Response" + response); 

     this.events = response; 
     console.log('EVENTS: '); 
     console.log(this.events); 
     }, 
     function(error) { console.log("Error happened" + error)}, 
     function() { console.log("the subscription is completed")} 
    ); 
    } 

내가 표시하기 위해 노력하고있어, 그 빈 :

<ul *ngIf="events"> 
        <li *ngFor="let event of events"> 
         <a [routerLink]="['/gallery/', 'event1']"> 
          {{event.name}} 
         </a> 
        </li> 
... 

무엇이 문제 일 수 있습니까?

+0

plunkr에 ur 코드를 넣을 수 있습니까? 나는 작동하지 않는 것을 거의 찾을 수 없다. 데이터가 componenet 레벨에서 위안을 받고 있다고 가정합니다. – Smit

+0

지금까지 console.log는 데이터가 성공적으로 얻어 졌음을 보여 줬지만 그 전에 렌더링 된 느낌이 들었습니다. 그러나 비슷한 주제를 검색 할 때 사람들은 일반적으로 * ng 지시어를 추가하고 문제를 해결하지만 제 경우에는 그렇지 않습니다. plunkr을 만들려고합니다 – d123546

+0

생성자에서 코드를 ngOnInit으로 옮기는 것이 좋습니다. 구성 요소에서 Input 바인딩을 사용하기 시작하면 예상대로 작동하지 않습니다. 생성자가 호출 될 때 Angular가 아직 바인딩을 초기화하지 않았기 때문입니다. 구성 요소 생성자에서 수행하는 작업을 최소화하는 것이 좋습니다. – snorkpete

답변

1

화살표 기능을 사용하십시오. 그것들이 없으면, this은 칼백 함수의 구성 요소 인스턴스에 바인딩되지 않습니다.

.subscribe(response => { 
    console.log("Success Response" + response); 
    this.events = response; 
}, 
... 
+0

대단히 감사합니다! 해결됨 :) – d123546