2017-02-03 15 views
0

私はAngular 2を学び、Angular CLIを使ってAngular 2で作成したAngular 1アプリを再構築しようとしています。私は正常に起動するHTTP GET要求をセットアップし、結果を解釈するためにサブスクライバをセットアップし、サブスクライバ機能のコンソールログは私が期待するデータを表示します。ただし、テンプレート上のデータは更新されません。テンプレートで観測可能なデータが更新されていません

データを初期値、ngOnInitの値、およびサブスクライバ関数に設定しようとしましたが、initialとngOnInitはそれに応じてテンプレートを更新しました。私の人生のために、なぜテンプレートが購読で更新されないのか理解できません。

events: any[] = ['asdf']; 

constructor(private http: Http) { 
} 

ngOnInit() { 
    this.events = ['house']; 
    this.getEvents().subscribe(this.processEvents); 
} 

getEvents(): Observable<Event[]> { 
    let params: URLSearchParams = new URLSearchParams(); 
    params.set('types', this.filters.types.join(',')); 
    params.set('dates', this.filters.dates.join(',')); 
    return this.http 
     .get('//api.dexcon.local/getEvents.php', { search: params }) 
     .map((response: Response) => { 
      return response.json().events; 
     }); 
} 

processEvents(data: Event[]) { 
    this.events = ['car','bike']; 
    console.log(this.events); 
} 

データはngForで表示されますが、車と自転車は表示されません。どこが間違っていたのですか?

答えて

1

あなたはこのようなものを行う場合、:

.subscribe(this.processEvents); 

コンテキストに迷子processEvents機能です。

あなたはそれをバインドするかがあります。

.subscribe(this.processEvents.bind(this)); 

は、匿名関数を使用します。

.subscribe((data: Events) => {this.processEvents(data)}); 

またはクラスのプロパティにあなたの方法を設定します。

processEvents: Function = (data: Event[]) => { 
    this.events = ['car','bike']; 
    console.log(this.events); 
} 

お気に入りを選んで、私は最後のオプションが好きです。eventListenersを使用すると、このmで簡単に切り離すことができます民法。

+0

説明をいただきありがとうございます。私はコードを複製するのを避けるために別の関数を使用していますので、2番目のオプションを使用することもできますが、一般的には3番目のオプションを選択します。ありがとうございました。 – RhoVisions

1

実際に何が起こっているのかわからないのは、processEventsです。あなたはあなたの応答をサブスクライブしたい場合は、単に実行します。あなたは活字体のthis文脈を尊重しないと間違って行っている

this.getEvents() 
    .subscribe(data => { 
    this.events = data; 
}); 
+1

または、this.getEvents()。subscribe(data => {this.processEvents(data)});は正確に100%効率的ではありませんが... – DGarvanski

+0

'processEvents'にはもっと多くのことがありますが、私はそのための関数を作るべきです。しかし、ラムダ関数かクラスメソッドかは関係ありませんか? – RhoVisions

+0

いいえ、私はあなたに完全に同意します。必要でない場合は、メソッド/関数を作成しないでください。私は 'processEvents'関数で別のものがあると仮定しました。なぜなら、' events'の配列を設定し、おそらく必要となる可能性があるからです。だから、私は約束が好きなんだ。なぜなら、あなたはすべてのことを。できるだけだから。... – DGarvanski

関連する問題