2016-08-25 135 views
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然后发布到这里。 –