我在服务中添加一个监听器,如下所示:
app.service('hostService', ['$rootScope', function ($rootScope) {
this.addListener = function () {
console.log("addListener")
$rootScope.$on("messageFromSiteToHost", function (event, data) {
action(data);
})
}
然后我意识到用户多次调用hostService.addListener
,结果,当有messageFromSiteToHost
的消息时,多次调用action(data)
。
有没有人知道是否有办法检查是否已设置$rootScope.$on("messageFromSiteToHost"
(不使用服务中的辅助变量)。如果已经设置,我不想两次添加监听器。
答案 0 :(得分:0)
框架中没有可用于检查现有事件侦听器的内容。
您能解释一下您要求不使用“服务中的辅助变量”的原因吗?
为什么你不能为这个功能添加一个警卫?是什么原因?:
app.service('hostService', ['$rootScope', function ($rootScope) {
var listenerAdded = false;
this.addListener = function () {
if (listenerAdded){
return;
}
listenerAdded = true;
console.log("addListener")
$rootScope.$on("messageFromSiteToHost", function (event, data) {
action(data);
})
}
}]);
此外,如果您发现需要在整个应用程序中执行此操作,那么您可以概括实现或使用lodash.once
之类的内容来删除样板:
app.service('hostService', ['$rootScope', function ($rootScope) {
this.addListener = _.once(function () {
console.log("addListener")
$rootScope.$on("messageFromSiteToHost", function (event, data) {
action(data);
})
});
}]);