我遇到了从Observable订阅更新string []集合的问题:
heroes:string[] = ['milan'];
// this works fine
let current = this;
(function theLoop (i: number) {
setTimeout(() => {
current.heroes.push('marta');
if (--i) {
theLoop(i);
}
}, 10000);
})(10);
let current = this;
// this gets callback every 2s
this.heroesSignalRService.heroeCreated().subscribe((hero) ={
current.heroes.push(hero);
})
初始集合只有一个项目,在UI中可见, 可观察的回调将在计时器添加新项目之前添加4个新项目。 在计时器触发之前,回叫添加的所有英雄都不可见。 定时器推送后,所有4个新项目通过订阅添加,1个英雄添加 通过计时器可见。
为什么?如何解决?
答案 0 :(得分:0)
使用ChangeDetectorRef解决了集合刷新:
import {Component, ChangeDetectorRef} from 'angular2/core';
constructor(private cdr: ChangeDetectorRef)
this.heroesSignalRService.heroeCreated().subscribe((hero) ={
current.heroes.push(hero);
current.cdr.detectChanges();
})