首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从提供者到$rootScope的事件不是$rootScope?

为什么从提供者到$rootScope的事件不是$rootScope?
EN

Stack Overflow用户
提问于 2013-08-01 15:19:44
回答 1查看 7K关注 0票数 1

为了在我的AngularJS应用程序中保持非耦合,我有一个validationService,不同的控制器可能会调用它来执行验证。实际上,给定控制器中的validate()方法应该只$emit服务将侦听的事件(例如request:validate) --但是$rootScope似乎从未接收到发出的事件。例如:

代码语言:javascript
复制
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开始吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 15:27:25

您没有实例化validationService,因此侦听器不会被附加。将其包含在模块中,并将其注入控制器。

代码语言:javascript
复制
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方法中执行绑定。

代码语言:javascript
复制
angular.module("mine", ["mine.services"]).run(function(validationService){});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17998077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档