我已经能够让控制器使用 $on 监听器$scope.$on
。
但我没有看到任何关于如何让服务监听事件的文档。
我试过$rootScope.$on
了,但这只允许一个听众。我想要多个服务中的侦听器,无论它们的父控制器是否在范围内。
我已经能够让控制器使用 $on 监听器$scope.$on
。
但我没有看到任何关于如何让服务监听事件的文档。
我试过$rootScope.$on
了,但这只允许一个听众。我想要多个服务中的侦听器,无论它们的父控制器是否在范围内。
在进行了相当多的实验之后,事实证明,可以用最少的代码来为服务获取事件。
示例服务代码如下,以防其他人遇到此问题。
该示例在获得相应的广播时将服务模型保存并恢复到本地存储
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;
}]);
由于$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');
}
但是,我不会推荐这种方法,因为范围通常不与服务相关联。