2016-08-08 4 views
1

Webカメラを使用して画像をキャンバス要素にスナップし、Blobとして抽出するAngular2コンポーネントを開発しています。別に、Blobとイベントは正常に動作しますが、toBlobのコールバック関数からイベントを送出しようとすると、そのイベントはリスナーのために発生しなくなります。Angular2 EventEmitterがコールバックで放出されたときにイベントを発生させない

これは動作します:

var self = this; 

self.gotSnapshot.emit({}); //Raises the gotSnapshot event correctly. 

this.canvas.toBlob(function(blob){ 
    console.log(blob); //Logs the blob to console correctly. 
}); 

これはしていません:

var self = this; 

this.canvas.toBlob(function(blob){ 
    self.gotSnapshot.emit(blob); //Event is never raised for listeners 
}); 

私はtoBlobが非同期で実行されているからだと確信しています。 Angular1では、私の本能は$ timeoutとcall applyを行うことになりますが、私はEventEmitterに対してこれ以上対処する必要はないと考えました。

誰もがこの問題を回避する方法を知っていますか?

答えて

3

このAPIは、Angularsゾーンではパッチされていません。あなたは、その後に発生する変化検出のための明示的Angularsゾーン内のコードの実行を行う必要があります。あなたの代わりにfunction()

+2

ワウの() =>を使用する場合

constructor(private zone:NgZone){} someMethod() { this.canvas.toBlob((blob) => { this.zone.run(() => { this.gotSnapshot.emit(blob); }); }); } 

ます。またselfを必要としない、それは速かったです!どうもありがとうございました。私はそれが私が聞いてきたこの 'ゾーン'のことについてすべてを学ぶべき時だと思う。 – Martaver

関連する問題