gpt4 book ai didi

javascript - 为什么来自提供者的事件不 $emit 到 $rootScope?

转载 作者:行者123 更新时间:2023-11-30 08:06:09 24 4
gpt4 key购买 nike

为了在我的 AngularJS 应用程序中保持分离,我有一个单独的 validationService ,不同的 Controller 可以调用它来执行验证。实际上,给定 Controller 中的 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 监听事件的方式有什么奇怪的地方吗?

是否有一种“更 Angular 化”的方法来解决这个问题? Controller 是否应该直接调用 validationService$rootScope 中的事件 $broadcast 是否应该以开头?

最佳答案

您没有实例化 validationService 因此不会附加监听器。将其包含在模块中并将其注入(inject) Controller 。

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');
});
}
]);

如果您不想将服务注入(inject)到 Controller 中,您可以在modulerun 方法中进行绑定(bind)

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

关于javascript - 为什么来自提供者的事件不 $emit 到 $rootScope?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17998077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com