2017-03-05 15 views
0

特定の質問は既にチェックされていますが、それでも問題を解決できませんでした。私はすべてが、この段階で結構ですが、私は、データを表示する場合、何も起こりません、観測を返す私のアプリでサービスを使用しています:angular 2 * ngForおよびObservablesオブジェクト、データが表示されない

@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コードを入れられますか?私は働いていないものはほとんど見つけられません。データがコンポーネントレベルでコンソールされていると仮定します。 – Smit

+0

これまでのところ、console.logはデータが正常に取得されたことを示していますが、その前にレンダリングされたビューを感じました。しかし、同様のトピックを検索すると、通常は* ngIfディレクティブを追加して問題を解決しますが、私の場合はそうではありません。私はplunkrを作成しようとします – d123546

+0

あなたのコンストラクタでコードをngOnInitに移動することもお勧めします。最終的にコンポーネントでInputバインディングを使用し始めると、コンストラクターが呼び出されたときにAngularがまだバインディングを初期化していないため、期待どおりに機能しません。コンポーネントのコンストラクタで行う作業を最小限に抑えることは良い練習です – snorkpete

答えて

1

矢印機能を使用します。それらがなければ、thisは、あなたのカルバック関数のコンポーネントインスタンスにバインドされていません:

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

ありがとうございました!解決済み:) – d123546

関連する問題