首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角$emit,$on不工作

角$emit,$on不工作
EN

Stack Overflow用户
提问于 2017-06-10 00:32:17
回答 1查看 1.6K关注 0票数 2

我在试着学习角度事件听力。用户单击按钮后,控制器查询数据库,并在按钮的处理程序中返回一个值。我很难将这个值传递给$scope,以便其他函数可以访问数据。

第一个问题:这是事件侦听器的目的吗?还有别的办法来做我想做的事吗?

下一个问题:为什么这段代码不能工作:

代码语言:javascript
复制
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。然后事件不会被发出,或者侦听器不会捕捉到它。

EN

回答 1

Stack Overflow用户

发布于 2017-06-10 01:17:01

$emit向上分派一个事件. $broadcast向下分派一个事件

详细解释

$rootScope.$emit只允许其他$rootScope侦听器捕获它。当您不希望每个$scope都得到它时,这是很好的。主要是高层交流。把它想象成成年人在房间里互相交谈,这样孩子们就听不见了。

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

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

$scope.$broadcast是为$scope本身和它的孩子准备的。这是一个小孩对它的毛绒动物低声说话,所以他们的父母听不见。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44468352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档