Javascript AngularJS-服务中的$scopes

Javascript AngularJS-服务中的$scopes,javascript,angularjs,angularjs-scope,event-listener,Javascript,Angularjs,Angularjs Scope,Event Listener,所以我有一个服务,我想让它能够监听在别处触发的事件 我发现这个问题给出了部分解决方案: 然而,我得到的是一个Listen服务,它处理我所有代码的侦听器。 现在我想从我的用户服务收听收听服务中的一位听众 到目前为止,我得到的是: angular.module('app') .factory('Listen', function ($rootScope) { var service = { ... a bunch of event listeners

所以我有一个服务,我想让它能够监听在别处触发的事件

我发现这个问题给出了部分解决方案:

然而,我得到的是一个
Listen
服务,它处理我所有代码的侦听器。 现在我想从我的
用户
服务收听
收听
服务中的一位听众

到目前为止,我得到的是:

angular.module('app')
.factory('Listen', function ($rootScope) {
    var service = {
        ... 
        a bunch of event listeners
        ... 

        // Event listener
        unique: function(scope, name, callback) {
            var handler = $rootScope.$on('unique-' + name, callback);
            scope.$on('$destroy', handler);
        },

        activateUnique: function(name){
            $rootScope.$emit('unique-' + name);
        }
    };
    return service;
});



正如您可能注意到的那样,
Listen.unique
函数需要一个
$scope
,当从
控制器
进行侦听时,这很好,但当从服务进行侦听时,则不需要使用新的
$rootScope.$on('unique-'+名称,回调)来解决这个问题
用户服务中

是否可以选择连接控制器中的服务?将两个模块“连接”在一起是不好的做法。所以最好的方法是通过一个控制器“加入”服务,这样你就有了可用的作用域-(
angular.module('app')
.factory('userService', function (Listen) {
    console.warn('LOADING: user.service.js');
    var session,
        id,
        callDone = false,
        service = {
        ... 
        some service functions
        ...
    };

    service.startSession();

    Listen.unique($scope, id, function() {
        callDone = true;
    });

    return service;
});