在AngularJS中使用$ broadcast(),$ emit()和$ on()

时间:2016-06-09 05:26:53

标签: angularjs

我了解$Broadcast()$Emit()$On()用于在一个控制器中引发事件并在另一个控制器中处理。如果可能,有人可以给我一些关于上述三种用法的实时示例,因为我是angular JS的新手吗?

我已浏览以下链接并了解基本用法。

http://www.binaryintellect.net/articles/5d8be0b6-e294-457e-82b0-ba7cc10cae0e.aspx

4 个答案:

答案 0 :(得分:106)

<强> $ EMIT

它通过范围层次结构向上调度事件名称,并通知已注册的$rootScope.Scope侦听器。事件生命周期从调用$emit的范围开始。事件向上遍历根范围并沿途调用所有已注册的侦听器。如果其中一个侦听器取消它,该事件将停止传播。

<强> $广播

将事件名称向下调度到所有子范围(及其子级),并通知已注册的$rootScope.Scope侦听器。事件生命周期从调用$broadcast的范围开始。此范围内事件的所有侦听器都会收到通知。之后,事件向下遍历子范围,并在此过程中调用所有已注册的侦听器。该活动无法取消。

在$

它监听给定类型的事件。它可以捕获$broadcast$emit发送的事件。

视觉演示:

演示工作代码,直观地显示范围树(父/子关系):
   http://plnkr.co/edit/am6IDw?p=preview

演示方法调用:

  $scope.$on('eventEmitedName', function(event, data) ...
  $scope.broadcastEvent
  $scope.emitEvent

答案 1 :(得分:15)

这个小例子展示了$rootScope如何发出一个将被另一个控制器中的子范围监听的事件。

(function(){


angular
  .module('ExampleApp',[]);

angular
  .module('ExampleApp')
  .controller('ExampleController1', Controller1);

Controller1.$inject = ['$rootScope'];

function Controller1($rootScope) {
  var vm = this, 
      message = 'Hi my children scope boy';

  vm.sayHi = sayHi;

  function sayHi(){
    $rootScope.$broadcast('greeting', message);
  }

}

angular
  .module('ExampleApp')
  .controller('ExampleController2', Controller2);

Controller2.$inject = ['$scope'];

function Controller2($scope) {
  var vm = this;

  $scope.$on('greeting', listenGreeting)

  function listenGreeting($event, message){
    alert(['Message received',message].join(' : '));
  }

}


})();

http://codepen.io/gpincheiraa/pen/xOZwqa

@gayathri底部的答案在技术上解释了范围角度概念及其实现$scope$rootScope中所有这些方法的差异。

答案 2 :(得分:15)

  • 广播:我们可以将值从父级传递给子级(即父级 - >子级控制器。)
  • Emit:我们可以将值从child传递给parent(即children - &gt; parent controller。)
  • 开启:抓住$broadcast$emit
  • 发送的事件

答案 3 :(得分:4)

这是一个关于agular事件的示例帖子,有一个很好的例子。如果你想要你可以通过可以。希望你能比你想象的更清楚这个角度事件。链接在这里 http://www.riaxe.com/blog/understanding-angulars-scope-and-rootscope-event-system-emit-broadcast-and-on/