Angularjs:控制器未接收服务中发出的数据

Angularjs:控制器未接收服务中发出的数据,angularjs,Angularjs,我希望服务接收到的数据被传输到控制器,但控制器没有接收到数据 服务: angular.module('dataService', []) .constant('productCategoryUrl', ' /api/product/categories') .service('dataService', function ($rootScope, $http, $filter, $rootScope, productCategoryUrl) { var curr

我希望服务接收到的数据被传输到控制器,但控制器没有接收到数据

服务:

angular.module('dataService', [])
    .constant('productCategoryUrl', ' /api/product/categories')
    .service('dataService', function ($rootScope, $http, $filter, $rootScope, productCategoryUrl) {

        var currentData = {};
        var productCategories = [];  

        return {
            setCurrentCategory: function (category, type) {
                $rootScope.$broadcast('set-category', currentData);
            },
       }
   })
控制器:

angular.module('jordans')
    .controller('productCategoryCtrl', function ($scope, $rootScope, dataService) {
         $scope.productCategories = [];             

         $rootScope.$on('set-category', function (e, args) {                   
                $scope.currentData.category = args.category;
                $scope.currentData.type = args.type;

                console.log('*******productcategory.currentdata = ' 
                  + JSON.stringify($scope.currentData))                    
            });
  }

为什么在服务中添加了两个
$rootScope
实例。删除此选项可以解决此问题

.service('dataService', function ($rootScope, $http, $filter, $rootScope, productCategoryUrl) {
应该是:

service('dataService', function ($http, $filter, $rootScope, productCategoryUrl) {
问题: 为什么在服务中使用$broadcast。您可以直接创建 方法,并从控制器调用它

您还需要销毁$rootScope listerner:请参见以下答案:


您正在调用
dataService.setCurrentCategory()
?i、 事件是否被提起!?嗯,我过早地接受了维德的回答。这不是解决办法。对于您的问题,调用了seccurrentcontegory()。您的实现需要改进。另外,你还需要破坏rootscope侦听器。事实上,维德,我接受你的答案有点过早。这不是问题所在。@koque那么你解决了问题了吗?是的,Ved,问题是,在数据服务进行广播时,productCategoryCtrl没有加载,因此它没有接收广播。