我使用ionic2,实现了一个类:
import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
constructor() {
super();
}
}类被of组件用于将cordova插件事件连接到订阅LocalPushClear的另一个组件,我侦听clear事件,它触发的事件,我使用LocalPushClear发出消息,其他组件订阅:
this._LocalPushClear.subscribe(data => {
// Some action is taken here
});问题是,我期望自动change detection在执行订阅回调时被执行(当它完成时),但是似乎根本没有变化检测执行,我必须做一些类似click a按钮的事情,或者用zone.run包装我的一些动作,我不确定它是有效的行为还是可能我做错了什么。
编辑:,我追踪代码,它通向主题,所以它基本上是NgZone不知道的自定义事件发射器(至少我认为是这样),但是我确信,如果有人能证实,也许未来的解释我会非常感激。
发布于 2016-05-03 04:16:21
您肯定应该,而不是扩展EventEmitter。EventEmitter只用于@Output(),只需使用Subject即可。
对于EventEmitter (以这种方式使用)或Subject发出的值,Angular不会得到通知。通常,导致Observable (Subject)发出新值的代码由代码执行,这些代码在完成时会导致更改检测,例如,当从事件处理程序或setTimeout调用时。
在您的例子中,原因似乎是使用LocalPushClear发出新值的代码运行在Angulars区域之外。
您可以使用https://stackoverflow.com/a/34829089/217408中解释的方法之一在Observable发出事件后触发更改检测。
https://stackoverflow.com/questions/36992560
复制相似问题