$ rootScope $ broadcast与$ scope $ emit
(此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
来覆盖所有预期的听众呢?
你可能想看: