[英]Why do events from provider not $emit to $rootScope?
为了使事情在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
? 从$rootScope
开始的$broadcast
事件应该开始吗?
您没有实例化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){});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.