为什么提供程序中的事件不$emit到$rootScope
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
?事件$broadcast
应该从$rootScope
开始吗?
您没有实例化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){});
相关文章:
- $rootScope未使用forEach进行更新
- $rootScope not working
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 无法在窗口内使用rootScope.通知
- 嵌套回调范围和rootScope AngularJS
- AngularJS ng src不会在$rootScope上使用$watch进行更新
- $emit,$broadcast,原型继承
- 如何在angular js中使用$emit后重新加载数据
- 如何在提供程序的配置中处理$rootScope
- Jasmine,Angular;rootScope$广播“;测验
- TypeError:socket.emit不是函数
- 为什么可以't在对指令的html调用中访问$rootScope
- 如何使用AngularJS$rootScope
- 如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
- window.location.href/reload导致AngularJS[$rootScope:infdig]达到1
- $rootScope.$emit and $on
- $scope.$emit 和 $rootScope.$emit 有什么区别
- 为什么提供程序中的事件不$emit到$rootScope
- 我如何得到$rootScope.$emit()和ng-show通过D3点击事件一起工作