Angular $ emit,$ on not working

时间:2017-06-10 00:32:17

标签: angularjs addeventlistener eventemitter

我正在尝试学习Angular事件监听。用户单击按钮后,控制器将查询数据库并在按钮的处理程序中返回一个值。我将此值传递给$scope时遇到问题,以便其他功能可以访问数据。

第一个问题:这是什么事件听众?还有另一种方法可以做我想要的吗?

下一个问题:为什么这段代码不起作用:

app.controller('EmitterCtrl', function($scope) {
  console.log("Emitter controller.");

  $scope.buttonClick = function() {
    console.log("Button clicked!"); // this works
    $scope.$emit('myEvent', 'Clicked!'); // child $scope
  };

  $scope.$on('myEvent'), function(event, data) { // parent $scope
    console.log("I heard it!"); // doesn't work
    console.log(event);
    console.log(word);
  };

});

<div ng-controller="EmitterCtrl">
  <button type="button" ng-click="buttonClick()">
    Click me!
  </button>
</div>

用户单击该按钮,事件处理程序将在控制器中触发。处理程序会创建一个子$scope,因此$emit会将事件发送给父$scope。然后事件没有发出,或听众没有抓住它。

1 个答案:

答案 0 :(得分:3)

  

$ emit向上调度一个事件... $ broadcast调度一个事件   向下

详细说明

$rootScope.$emit只允许其他$rootScope侦听器捕获它。如果您不希望每个$scope获得它,那么这很好。主要是高级别的沟通。把它想象成成年人在一个房间里互相交谈,这样孩子们就听不到了。

$rootScope.$broadcast是一种可以让所有内容听到它的方法。这相当于父母大喊大叫,晚餐准备就绪,所以房子里的每个人都听到了。

$scope.$emit是您希望$scope及其所有父母和$rootScope听到此事件的时间。这是一个孩子在家里向父母抱怨(但不是在其他孩子可以听到的杂货店)。

$scope.$broadcast适用于$scope本身及其子女。这是一个小孩子对它的毛绒动物说悄悄话,所以他们的父母听不到。