簡體   English   中英

為什么提供者的事件不是$ 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 $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');
        });
    }
]);

如果您不想將服務注入控制器,請在modulerun方法中進行綁定

angular.module("mine", ["mine.services"]).run(function(validationService){});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM