繁体   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