Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2事件发射器不';t在回调中发出时引发事件_Angular - Fatal编程技术网

Angular2事件发射器不';t在回调中发出时引发事件

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);

我正在开发一个Angular2组件,它使用网络摄像头将图片捕捉到画布元素,并将其提取为
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);
});
});
}

如果您使用
()=>
而不是
函数()

哇,那太快了!非常感谢,这正是我需要的。我想是时候去了解一下我一直听到的这个“区域”了。