(此tl; dr来自 @sp00m的以下答案)
$emit向上$broadcast调度事件…向下调度事件
$rootScope.$emit只让其他$rootScope听众抓住它。当您不希望所有人$scope都得到它时,这很好。主要是高层沟通。可以将它想象为成年人在房间里互相交谈,以使孩子听不到他们的声音。
$rootScope.$broadcast是一种几乎可以让所有人听到的方法。这相当于父母大喊大叫晚饭准备好了,这样屋子里的每个人都会听到。
$scope.$emit是当您想要它$scope及其所有父母并$rootScope听到事件的时候。这是一个孩子在家里向父母抱怨(但不在其他孩子可以听到的杂货店里)。
$scope.$broadcast是为了$scope自身及其子孙。这是一个对动物毛绒玩具说悄悄话的孩子,所以他们的父母听不到。
解决方法现在,之间的性能差异$broadcast和$emit已被淘汰,没有任何理由,更喜欢$scope.$emit到$rootScope.$broadcast?
他们是不同的,是的。
$emit 仅限于范围层次结构(向上)-如果它适合您的设计,这可能很好,但是在我看来,这是一个相当随意的限制。
$rootScope.$broadcast在所有 选择 收听此活动的人中都有效,这在我看来是一个更为明智的限制。
我想念什么吗?
编辑:
为了对回答做出澄清,调度的方向不是我要解决的问题。$scope.$emit向上调度事件,$scope.$broadcast-向下调度事件。但是,为什么不总是使用它$rootScope.$broadcast来覆盖所有预期的听众呢?