为了在我的AngularJS应用程序中保持非耦合,我有一个validationService,不同的控制器可能会调用它来执行验证。实际上,给定控制器中的validate()方法应该只$emit服务将侦听的事件(例如request:validate) --但是$rootScope似乎从未接收到发出的事件。例如:
angular.module('mine').controller('CommitController', [
'$scope',
function($scope) {
$scope.validate = function() {
$scope.$emit('request:validate');
};
}
]);
angular.module('mine.services').factory('validationService', [
'$rootScope',
function($rootScope) {
$rootScope.$on('request:validate', function(e) {
console.log('received the request:validate event - go ahead with validation');
});
}
]);但$on('request:validate')从不从$rootScope开火。$rootScope没有接收子作用域发出的事件吗?$rootScope如何倾听事件有什么奇怪之处吗?
是否有“更多角度”的方法来解决这个问题?控制器应该直接调用validationService吗?事件应该从$broadcast开始从$rootScope开始吗?
发布于 2013-08-01 15:27:25
您没有实例化validationService,因此侦听器不会被附加。将其包含在模块中,并将其注入控制器。
angular.module('mine',["mine.services"]).controller('CommitController', [
'$scope', "validationService",
function($scope, vs) {
$scope.validate = function() {
$scope.$emit('request:validate');
};
}
]);
angular.module('mine.services',[]).factory('validationService', [
'$rootScope',
function($rootScope) {
$rootScope.$on('request:validate', function(e) {
console.log('received the request:validate event -'+
'go ahead with validation');
});
}
]);如果不想将服务注入控制器,则在module的run方法中执行绑定。
angular.module("mine", ["mine.services"]).run(function(validationService){});https://stackoverflow.com/questions/17998077
复制相似问题