我正在开发一个Angular2组件,该组件使用网络摄像头将图片捕捉到canvas元素,并将其提取为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并调用apply,但是我认为对于EventEmitter,我们不必再处理所有这些了吗?
有人知道如何解决这个问题吗?
Angulars区域未对此API进行修补。您需要明确地使代码在Angulars区域中运行,以便随后进行更改检测:
constructor(private zone:NgZone){}
someMethod() {
this.canvas.toBlob((blob) => {
this.zone.run(() => {
this.gotSnapshot.emit(blob);
});
});
}
你也并不需要self
,如果你使用() =>
的不是function()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句