回调更新集合时,Angular 2表不刷新,计时器更新刷新整个集合

时间:2017-06-22 22:12:35

标签: javascript angular signalr

我遇到了从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个英雄添加 通过计时器可见。

为什么?如何解决?

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();
})