Q:

Angular 2 EventEmitter событие вызывается, но данные не обновляются

Создается EventEmitter динамически
 public AddEventHandler(EventName: string, EventHandler: (value: any) => void):any {

        let ei: EventItem;
        let isFirst = false;

        if (!this.EventsList.has(EventName)) {
            let EventKey = window.CallNetMethod(0, "GetUniqueString");

            let Event = new EventEmitter<any>(true);
            ei = new EventItem(EventKey, Event);
            this.EventEmittersList.set(EventKey, Event);
            NetObject.EventCallers.set(EventKey, this.RaiseEvent.bind(this));

И вызывается
 public RaiseEvent(EventKey: string, value: any)
    {
      // Если есть подписчики, то вызываем их
        if (this.EventEmittersList.has(EventKey))
        {
            this.EventEmittersList.get(EventKey).emit(value);
        }

    }

Но проблема в том, что форма не реагирует на изменение полученных данных.
Если же я в использую Timer из этого же объекта
public SetTimer(func:(value: any)=>void)
        {
            let timer = Observable.timer(2000, 1000);
            timer.subscribe((value: any) => { func(value) });
        }

то он прекрасно обновляет форму даже вызвав
пустой делегат
this.AddEventHandlerResult = this.WOWE.AddEventHandler("TestEvent3", (value: any) => { this.EventsRes.push(new EventRes("TestEvent3", value)); });

this.WOWE.SetTimer((value: any) => {});

Я конечно могу переделать на Observable.create
Но вопрос можно ли использовать EventEmitter и как?
Переделал на Observable
class EventEmitter
{

    public data: Observable<any>;
    public dataObserver: Observer<any>;

    constructor() {
        this.data = Observable.create((observer: any) => this.dataObserver = <Observer<any>>observer);

        alert("this.data"+this.data);
    }

    public subscribe(EventHandler: (value: any) => void)
    {

      return  this.data.subscribe(EventHandler);

    }

    public emit(value: any)
    {
        this.dataObserver.next(value);
    }

    public Complete()
    {
        this.dataObserver.complete();

    }
}

Эффект тот же. То ли контекст не тот. Подскажите кто знает.

A:

Нужно использовать NgZone
Сделал свой EventEmitter на основании Subject
class EventEmitter{

    public subject = new Subject<any>();

    constructor(private ngZone: NgZone) {}

    public subscribe(EventHandler: (value: any) => void) {

        return this.subject.subscribe({
            next: (v) => this.ngZone.run(()=> EventHandler(v))
        });

    }

    public emit(value: any) {
        this.subject.next(value);

    }

    public Complete() {
        this.subject.complete();

    }
}

В конструкторе компонента получаю NgZone и создаю на его основе  эмитер на основании Subject
export class TestEventComponent {
    constructor(private ngZone: NgZone) {

Который и использую при создании своего EventEmitter
Хорошая статья про зоны Что такое Зоны(Zones)?

