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



我在从可观察订阅更新 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 个英雄全部添加通过计时器是可见的。

为什么?如何解决?

集合刷新已使用 ChangeDetectorRef 解决:

import {Component, ChangeDetectorRef} from 'angular2/core';
constructor(private cdr: ChangeDetectorRef)
this.heroesSignalRService.heroeCreated().subscribe((hero) ={
     current.heroes.push(hero);
     current.cdr.detectChanges();
})

最新更新