角度 $emit,$on 不工作

Tho*_*hoe 2 addeventlistener eventemitter angularjs

我正在尝试学习 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>
Run Code Online (Sandbox Code Playgroud)

用户单击按钮,事件处理程序在控制器中触发。处理程序创建一个子级$scope,因此$emit将事件发送到父级$scope。那么事件不会被发出,或者侦听器不会捕获它。

Gha*_*han 5

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

详细解释

$rootScope.$emit只让其他$rootScope听众听到。当您不希望每个人都$scope得到它时,这很好。主要是高层沟通。可以将其想象为成年人在房间里互相交谈,这样孩子们就听不到他们的声音。

$rootScope.$broadcast是一种让几乎所有东西都能听到的方法。这相当于父母大喊晚餐准备好了,这样家里的每个人都能听到。

$scope.$emit就是当你想要那个$scope和它的所有父母并$rootScope听到这个事件的时候。这是一个孩子在家里向父母抱怨(但不是在其他孩子可以听到的杂货店)。

$scope.$broadcast是为了它$scope本身和它的孩子。这是一个孩子对着毛绒玩具窃窃私语,这样他们的父母就听不到。