3

我仍然在努力學習ng2,所以我確定這是一個常見的noob問題,但是我在網上找到的解決方案都沒有幫助。任何人都知道我的問題是什麼?Angular 2:HTTP服務更新後模板不會更新

我與getEventList()方法中的服務作爲可觀察到的

getEventList(): Observable<any>{ 
    return this.http.get('./assets/data.json') 
     .map(response => response.json()); 
} 

我訂閱了它在我的組件

ngOnInit(){ 
    this.eventService.getEventList() 
     .subscribe(events => { 
      this.zone.run(()=>{ 
       this.events = events; 
       console.log(this.events) 
      }); 
     }); 
} 

我的模板,只是試圖輸出變量的事件JSON格式

<p> 
    {{ 
     events | json 
    }} 
</p> 

正如你所看到的,我將事件的值分配給本地v在zone.run()回調中變得可行。仍然沒有看到我的模板更新。我也嘗試了ApplicationRef.tick和ChangeDetectorRef.detectChanges(),但都沒有檢測到我的更改。

Console.log調用確認數據已更新。在這個組件上觸發的任何點擊處理程序似乎也更新視圖。

任何人都知道我在這裏做錯了嗎?我是否張貼了足夠的代碼來獲得一些建議?讓我知道你還想看什麼。

+1

發佈您的HTML。 –

+0

很少@StefanSvrkota,但你去。謝謝! –

回答

0

的種子設定ChangeDetectionStrategy到OnPush。設置爲默認解決了我的問題。

0

這應該這樣做,假設調用getEventList()方法之前,你有沒有分配一個值this.events

<div *ngIf="events"> 
{{ events | json }} 
</div> 
+0

謝謝!我一直在爲它分配一個空數組作爲值,但即使沒有你的建議也沒有幫助。 –

+0

我只是測試了你的代碼,沒有'this.zone.run',它就像一個魅力。像這樣:'ngOnInit(){this.eventService.getEventList() .subscribe(events => {this.events = events; console.log(this.events) }); }' –

+0

即使使用this.zone.run也行,我只是試過了。不知道你的目標是什麼導致問題。也許把你的代碼複製到plunker然後發佈到這裏。 –