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