我已经能够让控制器使用$ on on listener $scope.$on
.
但我没有看到任何关于如何获得服务来监听事件的文档.
我试过了$rootScope.$on
,但这只允许一个听众.我想要多个服务中的监听器,无论他们的父控制器是否在范围内.
Ant*_*ton 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;
}]);
Run Code Online (Sandbox Code Playgroud)
Mar*_*cok 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');
}
Run Code Online (Sandbox Code Playgroud)
但是,我不推荐这种方法,因为范围通常与服务无关.