[英]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.