首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular2,doe的EventEmitter需要zone.run吗?

Angular2,doe的EventEmitter需要zone.run吗?
EN

Stack Overflow用户
提问于 2016-05-02 22:22:34
回答 1查看 720关注 0票数 1

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

代码语言:javascript
复制
import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
    constructor() {
      super();
    }
}

类被of组件用于将cordova插件事件连接到订阅LocalPushClear的另一个组件,我侦听clear事件,它触发的事件,我使用LocalPushClear发出消息,其他组件订阅:

代码语言:javascript
复制
this._LocalPushClear.subscribe(data => {
    // Some action is taken here
});

问题是,我期望自动change detection在执行订阅回调时被执行(当它完成时),但是似乎根本没有变化检测执行,我必须做一些类似click a按钮的事情,或者用zone.run包装我的一些动作,我不确定它是有效的行为还是可能我做错了什么。

编辑:,我追踪代码,它通向主题,所以它基本上是NgZone不知道的自定义事件发射器(至少我认为是这样),但是我确信,如果有人能证实,也许未来的解释我会非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 04:16:21

您肯定应该,而不是扩展EventEmitterEventEmitter只用于@Output(),只需使用Subject即可。

对于EventEmitter (以这种方式使用)或Subject发出的值,Angular不会得到通知。通常,导致Observable (Subject)发出新值的代码由代码执行,这些代码在完成时会导致更改检测,例如,当从事件处理程序或setTimeout调用时。

在您的例子中,原因似乎是使用LocalPushClear发出新值的代码运行在Angulars区域之外。

您可以使用https://stackoverflow.com/a/34829089/217408中解释的方法之一在Observable发出事件后触发更改检测。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36992560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档