私はionic2を使用していて、私は、クラスを実装:Angular2、doeのEventEmitterにはzone.runが必要ですか?
import {EventEmitter, Injectable} from 'angular2/core';
@Injectable()
export class LocalPushClear extends EventEmitter<number> {
constructor() {
super();
}
}
クラスはLocalPushClear
を購読する別のコンポーネントにcordova plugin eventを接続するために私のコンポーネントの上で使用されて、私は、clear
イベント、それが発火するものに耳を傾けます私はLocalPushClear
を使用して放射し、他のいくつかのコンポーネントがサブスクライブ:
this._LocalPushClear.subscribe(data => {
// Some action is taken here
});
事は、私が(そのが行われたときに)サブスクリプションのコールバックの実行後に実行する自動change detection
を期待していた、ということですが、それはそこのように思えます何も変更検出の実行は全くありません。私はclick
ボタンのようなやり方をしなければなりません。いくつかのアクションとzone.run
と、私はその有効な動作か多分何か間違っているのか分かりません。
編集: その角度NgZoneエミッタその基本的にカスタムイベントは(少なくとも私は思う)について知らないが、誰もが確認できた場合、私は、確信しているので、私はコードをトレースし、それがSubjectにつながります、多分将来私は非常に感謝することを説明します。
あなたの**いくつかのアクション**は、LocalPushClearを購読している同じコンポーネント内のいくつかのプロパティを操作しています。少なくとも、変更検出の問題について言えばわかります。この場合、変更リクエストはコンポーネントドメイン外から来るので、**あるアクション**を 'zone.run'でラップする必要があります。 – RoninCoder
@ハニー最初に、コメントのおかげで、バグは、私が使っている 'EventEmitter'が 'angular/core'からエクスポートされているということです。それを実装しているコードで、私は直接答えを探しています。「EventEmitterから角度/コアからエクスポートすると自動的に変更検出が実行されません」とか、何か間違っているかもしれません。 –