【发布时间】:2016-05-02 22:22:34
【问题描述】:
我正在使用ionic2,我实现了一个类:
import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
constructor() {
super();
}
}
我的一个组件使用该类将cordova plugin event 连接到另一个订阅LocalPushClear 的组件,我监听clear 事件,它触发的事件,我使用LocalPushClear 发出的事件和其他一些订阅的组件:
this._LocalPushClear.subscribe(data => {
// Some action is taken here
});
问题是,我希望在订阅回调执行时自动执行change detection(完成后),但似乎根本没有执行更改检测,我必须做类似click一个按钮或用zone.run 包裹我的Some action,我不确定它是否有效,或者我做错了什么。
编辑: 我跟踪代码,它导致Subject,所以它基本上是角度 NgZone 不知道的自定义事件发射器(至少我认为),但我敢肯定,如果有人能证实,也许未来我会解释非常感谢。
【问题讨论】:
-
在我看来,您的 Some Action 操纵了已订阅
LocalPushClear的同一组件中的某些属性,至少这是我从提及更改检测问题时所理解的。如果是这种情况,那么是的,需要将 Some Action 包装为zone.run,因为更改请求来自组件域之外。 -
@Hani 首先,感谢您的评论,让我烦恼的是我正在使用的
EventEmitter,它是从 'angular/core' 导出的,我认为当我订阅时应该已经是实现它的代码中的更改检测激活,我正在寻找直接答案,例如“您从 angular/core 导出的 EventEmitter 不会自动运行更改检测”,或者我做错了什么。跨度>
标签: javascript angular ionic2