AngularJs销毁广播和发送列表

时间:2017-03-09 07:30:13

标签: javascript angularjs events

我在angularjs应用程序中使用$ broadcast和$ emit。这是我正在注册$ emit函数的代码:

ValueError: attempted relative import beyond top-level package

在另一个控制器中,我正在监听这个用于返回的发射函数是对象,如:

this.scope.$emit('changeTime', {
  currentTime: this.currentTime
});

这一切都很好。 但是这个监听器正在调用我根据不同条件调用的不同函数:

this.scope.$on('changeTime', (event, args) => {
  console.log(args.currentTime);
});

当我在控制台中打印第一个功能当前时间时。当我的条件发生变化并且在那个时候调用另一个函数functiontwo()时,我也可以看到functionone控制台值。

当第二个函数在一个函数之后调用时,意味着changetime侦听器调用两次。

那么我怎样才能取消注册这个先前调用的更改时间。所以第二次不来。

1 个答案:

答案 0 :(得分:3)

按设计listeners / $watch函数返回注销功能。因此,您可以通过直接调用dereigster函数来取消注册事件(如果它们存在)。

this.functionone = function(){
  this.deregisterEvents();
  this.eventOneChangeTime = this.scope.$on('changeTime', (event, args) => {
    console.log(args.currentTime);
  });
}

this.functiontwo = function(){
  this.deregisterEvents();
  this.eventTwoChangeTime = this.scope.$on('changeTime', (event, args) => {
    console.log(args.currentTime);
  });
}

deregisterEvents(){
    //unregistering events.
    if(this.eventOneChangeTime) this.eventOneChangeTime();
    if(this.eventTwoChangeTime) this.eventTwoChangeTime();
}