Angular2事件发射器不';t在回调中发出时引发事件
我正在开发一个Angular2组件,它使用网络摄像头将图片捕捉到画布元素,并将其提取为Angular2事件发射器不';t在回调中发出时引发事件,angular,Angular,我正在开发一个Angular2组件,它使用网络摄像头将图片捕捉到画布元素,并将其提取为Blob。分别而言,Blob和事件工作正常,但当我尝试从toBlob的回调函数中发出事件时,事件不再为其侦听器引发 这项工作: var self = this; self.gotSnapshot.emit({}); //Raises the gotSnapshot event correctly. this.canvas.toBlob(function(blob){ console.log(blob);
Blob
。分别而言,Blob
和事件工作正常,但当我尝试从toBlob
的回调函数中发出事件时,事件不再为其侦听器引发
这项工作:
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,我们不必再处理所有这些了
有人知道如何解决这个问题吗?这个API不是由Angulars zone修补的。您需要显式地使代码在Angulars zone中运行,以便随后进行更改检测:
构造函数(专用区域:NgZone){
someMethod(){
this.canvas.toBlob((blob)=>{
此.zone.run(()=>{
this.gotSnapshot.emit(blob);
});
});
}
如果您使用
()=>
而不是函数()
哇,那太快了!非常感谢,这正是我需要的。我想是时候去了解一下我一直听到的这个“区域”了。