![](/img/trans.png)
[英]Angular2 zone.run() vs ChangeDetectorRef.detectChanges()
[英]Angular2, doe's EventEmitter require zone.run?
我正在使用ionic2,我實現了一個類:
import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
constructor() {
super();
}
}
我的組件中的某個組件使用LocalPushClear
將cordova插件事件連接到另一個訂閱LocalPushClear
組件,我監聽clear
事件,它觸發這些事件,我使用LocalPushClear
發出,其他一些訂閱:
this._LocalPushClear.subscribe(data => {
// Some action is taken here
});
事實是,我希望在訂閱回調執行后(完成時)執行自動change detection
,但是似乎根本沒有更改檢測執行,我必須做一些事情,例如click
按鈕或包裝我的Some用行動 zone.run
,我不知道,如果它的一個有效的行為,或者也許我做錯了什么。
編輯:我跟蹤代碼並導致Subject ,所以它基本上是自定義事件發射器,角度NgZone不知道(至少我認為),但是我敢肯定,如果有人可以確認,也許將來我會解釋非常感謝。
你絕對不應該延長EventEmitter
。 EventEmitter
僅應用於@Output()
。 只需使用Subject
。
Angular不會收到有關EventEmitter
(以這種方式使用)或Subject
發出的值的通知。 通常,導致Observable
( Subject
)發出新值的代碼是由完成更改后導致更改檢測的代碼執行的,例如,從事件處理程序或setTimeout
調用時。
在您的情況下,原因似乎是使用LocalPushClear
發出新值的代碼在Angulars區域之外運行。
您可以使用https://stackoverflow.com/a/34829089/217408中介紹的方法之一,在Observable
發出事件后觸發更改檢測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.