我使用了ionic2,我实现了一个类:
import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
constructor() {
super();
}
}
我的组件使用该类将cordova plugin event连接到另一个订阅LocalPushClear
的组件,我听clear
个事件,它触发的事件,我使用{{ 1}}和其他一些组件订阅:
LocalPushClear
问题在于,我期望在订阅回调执行时执行自动this._LocalPushClear.subscribe(data => {
// Some action is taken here
});
(当它完成时),但似乎根本没有更改检测执行,我必须做类似{ {1}}按钮或将我的 某些操作 包裹在change detection
,我不确定它是否是有效的行为,或者我是不是做错了。
修改 我跟踪代码并导致Subject,因此它基本上是自定义事件发射器,角度NgZone不知道(至少我认为),但我确定,如果有人可以确认,也许未来的解释我会非常感激。
答案 0 :(得分:2)
你绝对应该不扩展EventEmitter
。 EventEmitter
仅应用于@Output()
。只需使用Subject
代替。
Angular没有收到EventEmitter
(以这种方式使用)或Subject
发出的值的通知。通常,导致Observable
(Subject
)发出新值的代码由代码执行,该代码在完成时导致更改检测,例如从事件处理程序或setTimeout
调用时。
在您的情况下,原因似乎是使用LocalPushClear
发出新值的代码在Angulars区域外运行。
您可以使用https://stackoverflow.com/a/34829089/217408中说明的其中一种方法在Observable
发出事件后触发更改检测。