我在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侦听器调用两次。
那么我怎样才能取消注册这个先前调用的更改时间。所以第二次不来。
答案 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();
}