Angular 2:http服务更新后模板未更新

时间:2016-08-25 16:10:03

标签: javascript ajax angular angular2-template angular2-services

我还在努力学习ng2,所以我确信这是一个常见的noob问题,但我在网上找到的解决方案都没有帮助。有谁知道我的问题是什么?

我有一个带有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>

正如您所看到的,我将事件的值分配给zone.run()回调中的局部变量。仍未看到我的模板更新。我也尝试过ApplicationRef.tick和ChangeDetectorRef.detectChanges(),但似乎都没有检测到我的更改。

Console.log调用确认数据已更新。在此组件上触发的任何单击处理程序似乎也会更新视图。

任何人都知道我在这里做错了什么?我是否发布了足够的代码来获得一些建议?让我知道你还想看到什么。

2 个答案:

答案 0 :(得分:0)

这应该这样做,假设您在调用function doSetTimeout(i, colors, strArray) { if(i >= strArray.length) return; $("use." + strArray[i]).css("fill", colors[Math.floor((Math.random() * colors.length) + 1)]); setTimeout(function() { $("use").css("fill", "#333333"); doSetTimeout(i + 1, colors, strArray); }, 1000); } doSetTimeout(0, colors, strArray); 方法之前尚未为this.events分配值:

getEventList()

答案 1 :(得分:0)

种子将ChangeDetectionStrategy设置为OnPush。将此设置为默认值可解决我的问题。