Javascript Angular2,doe';s EventEmitter是否需要zone.run?

Javascript Angular2,doe';s EventEmitter是否需要zone.run?,javascript,angular,ionic2,Javascript,Angular,Ionic2,我使用的是ionic2,我实现了一个类: import {EventEmitter, Injectable} from 'angular2/core'; @Injectable() export class LocalPushClear extends EventEmitter<number> { constructor() { super(); } } 问题是,我希望订阅回调执行时(完成后)会执行自动更改检测,但似乎根本没有更改检测执行,我必须执行类似

我使用的是ionic2,我实现了一个类:

import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
    constructor() {
      super();
    }
}
问题是,我希望订阅回调执行时(完成后)会执行自动
更改检测
,但似乎根本没有更改检测执行,我必须执行类似于
单击按钮或使用
区域包装我的某些操作。运行
,我不确定这是否是一种有效的行为,或者我做错了什么

编辑:
我追踪代码并将其引向,因此它基本上是angular NgZone不知道的自定义事件发射器(至少我认为),但我确信,如果有人能证实,也许将来解释我会非常感激。

你肯定应该而不是扩展
EventEmitter
EventEmitter
仅应用于
@Output()
s。只需使用
主题

Angular不会收到有关
EventEmitter
(以这种方式使用)或
主题发出的值的通知。通常情况下,导致
可观察的
主题
)发出新值的代码由在完成时导致更改检测的代码执行,例如,当从事件处理程序或
设置超时调用时

在您的情况下,原因似乎是使用
LocalPushClear
发出新值的代码在Angulars区域之外运行


您可以使用中介绍的其中一种方法在
可观察对象发出事件后触发更改检测。

在我看来,您的某个操作操作了订阅了
LocalPushClear
的同一组件中的某些属性,至少这是我提到更改检测问题时理解的。如果是这种情况,那么是的,它需要用
区域包装Some Action。运行
,因为更改请求来自组件域之外。@Hani首先,感谢您的评论,让我头疼的是我正在使用的
EventEmitter
,从“angular/core”导出,我想当我订阅时,应该已经在实现它的代码中激活了变更检测,我正在寻找直接的答案,比如“从angular/core导出的EventEmitter不会自动运行变更检测”,或者可能是我做错了什么。谢谢,我将使用
主题
this._LocalPushClear.subscribe(data => {
    // Some action is taken here
});