Angular2 EventEmitter在回调中发出时不引发事件

塞巴斯蒂安·内梅斯(Sebastian Nemeth)

我正在开发一个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,我们不必再处理所有这些了吗?

有人知道如何解决这个问题吗?

贡特·佐赫鲍尔(GünterZöchbauer)

Angulars区域未对此API进行修补。您需要明确地使代码在Angulars区域中运行,以便随后进行更改检测:

constructor(private zone:NgZone){}

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

你也并不需要self,如果你使用() =>的不是function()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular2“输出”回调

来自分类Dev

父类的Angular2 EventEmitter

来自分类Dev

在 Angular2 中发布数据

来自分类Dev

Angular2发出事件直到DOM树

来自分类Dev

通过Angular2中的嵌套组件发出事件

来自分类Dev

通过Angular2中的嵌套组件发出事件

来自分类Dev

打字稿语法angular2 promise然后回调

来自分类Dev

Angular2在回调中访问绑定实例变量

来自分类Dev

Angular2可观察到的回调

来自分类Dev

Angular2 指令监听父组件回调或更改

来自分类Dev

angular2中的(change)事件挂钩

来自分类Dev

了解Angular2更改事件

来自分类Dev

angular2图表和事件

来自分类Dev

Angular2和jQuery'change'事件

来自分类Dev

Angular2事件订阅无法触发?

来自分类Dev

Angular2 click事件未触发

来自分类Dev

Angular2,拖动事件。关闭问题

来自分类Dev

Angular2 如何触发(点击)事件

来自分类Dev

路由angular2时的可选参数

来自分类Dev

订阅时出现Angular2错误

来自分类Dev

路由angular2时的可选参数

来自分类常见问题

执行回调函数时,Angular2组件的“ this”未定义

来自分类Dev

尝试angular2时未定义Angular吗?

来自分类Dev

订阅Angular2中的EventEmitter无法正常工作

来自分类常见问题

有什么方法可以在Angular2中测试EventEmitter?

来自分类Dev

Angular2,Doe的EventEmitter是否需要zone.run?

来自分类Dev

Angular2:获取在EventEmitter中传递的单个参数

来自分类Dev

Angular2,EventEmitter上的订阅属性不存在?

来自分类Dev

我在Angular2 EventEmitter中做错了什么?