簡體   English   中英

Angular2,Doe的EventEmitter是否需要zone.run?

[英]Angular2, doe's EventEmitter require zone.run?

我正在使用ionic2,我實現了一個類:

import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
    constructor() {
      super();
    }
}

我的組件中的某個組件使用LocalPushClearcordova插件事件連接到另一個訂閱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發出的值的通知。 通常,導致ObservableSubject )發出新值的代碼是由完成更改后導致更改檢測的代碼執行的,例如,從事件處理程序或setTimeout調用時。

在您的情況下,原因似乎是使用LocalPushClear發出新值的代碼在Angulars區域之外運行。

您可以使用https://stackoverflow.com/a/34829089/217408中介紹的方法之一,在Observable發出事件后觸發更改檢測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM