2015-07-02 51 views
2

我想用角度创建自定义事件。目标是通过服务广播该事件,并且必须在控制器中捕捉。Angular:服务中的广播事件

我有我的服务:

function doSomething() { 
     // do something... 
     $rootScope.$broadcast("bced"); 
     $rootScope.$emit("emitted"); 
     console.log('event'); 
} 

和我的控制器:

$rootScope.$on("bced",function(){ 
    console.log("catched"); 
}); 
$rootScope.$on("emitted",function(){ 
    console.log("catched"); 
}); 

$scope.$on("bced",function(){ 
    console.log("catched"); 
}); 
$scope.$on("emitted",function(){ 
    console.log("catched"); 
}); 

但我不能赶上控制器事件。 console.log('event')显示,但我无法捕捉任何事件。 有人能解释我该怎么做吗? $ rootScope在服务和控制器中正确声明。

回答

6

结帐工作演示:

var app = angular.module('core', []); 
 
    app.service('SomeService', function($timeout, $rootScope){ 
 
     this.generateEvent = function(){ 
 
      $timeout(function(){ 
 
       $rootScope.$broadcast('event:show', {some: 'data'}); 
 
      }, 3000);  
 
     } 
 
     
 
    }) 
 
    
 
    app.controller('MainController', function($scope, SomeService){ 
 
     SomeService.generateEvent(); 
 
     $scope.$on('event:show', function(event, data){ 
 
      $scope.test = data.some; 
 
     }) 
 
    })
<div ng-app="core" ng-controller="MainController"> 
 
    {{test}} 
 
</div> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

+0

谢谢。它的工作,但问题是我的控制器不能在适当的时候调用函数generateEvent。那就是为什么我需要一个事件来通知控制器已经完成了一些事情。你有解决我的问题的想法吗? – xroskam

+0

你能帮我描述一下你的逻辑吗? –