我已经能够让控制器使用$ on on listener
与$scope.$on
。
但我没有看到任何关于如何获取服务来监听事件的文档。
我试过了$rootScope.$on
,但这只允许一个听众。我想要多个服务中的监听器,无论他们的父控制器是否在范围内。
答案 0 :(得分:47)
在尝试了一下后,事实证明,使用最少的代码可以完成向服务获取事件。
示例服务代码如果有其他人遇到此问题。
示例在获取相应广播时将服务模型保存并恢复到本地存储
app.factory('userService', ['$rootScope', function ($rootScope) {
var service = {
model: {
name: '',
email: ''
},
SaveState: function () {
sessionStorage.userService = angular.toJson(service.model);
},
RestoreState: function () {
service.model = angular.fromJson(sessionStorage.userService);
}
}
$rootScope.$on("savestate", service.SaveState);
$rootScope.$on("restorestate", service.RestoreState);
return service;
}]);
答案 1 :(得分:13)
由于$on
是范围方法,您可以在服务中创建范围,然后在其上侦听事件:
app.factory('myService', function($rootScope) {
var scope = $rootScope.$new(); // or $new(true) if you want an isolate scope
scope.$on('testEvent', function() {
console.log('event received');
})
return {}
});
function MyCtrl($scope, myService, $rootScope) {
$rootScope.$broadcast('testEvent');
}
但是,我不推荐这种方法,因为范围通常与服务无关。