检查是否已设置侦听器

时间:2018-03-05 23:38:15

标签: javascript angularjs angular-services

我在服务中添加一个监听器,如下所示:

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"(不使用服务中的辅助变量)。如果已经设置,我不想两次添加监听器。

1 个答案:

答案 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);
        })
    });

}]);