既然 $broadcast
和 $emit
之间的性能差异已经消除,那么有什么理由更喜欢 $scope.$emit
到 $rootScope.$broadcast
吗?
他们是不同的,是的。$emit
仅限于范围层次结构(向上) - 如果它适合您的设计,这可能很好,但在我看来这是一个相当随意的限制。$rootScope.$broadcast
适用于所有选择监听事件的对象,这在我看来是一个更明智的限制。
我错过了什么吗?
编辑:
为了回应答案澄清一下, dispatch 的方向不是我所追求的问题。 $scope.$emit
向上调度事件,$scope.$broadcast
- 向下调度。但是为什么不总是使用 $rootScope.$broadcast
来覆盖所有预期的听众呢?
最佳答案
tl;dr (这个 tl;dr 来自 @sp00m 下面的回答)
详细解释 $rootScope.$emit
只让其他 $rootScope
听众捕捉到它。当您不希望每个 $scope
都得到它时,这很好。主要是高层沟通。把它想象成成年人在一个房间里互相交谈,所以 children 听不到他们的声音。$rootScope.$broadcast
是一种让几乎所有东西都能听到的方法。这相当于 parent 大喊晚餐准备好了,所以房子里的每个人都能听到。$scope.$emit
是当您希望 $scope
及其所有父级和 $rootScope
听到该事件时。这是一个 child 在家里向 parent 提示(但不是在其他 child 可以听到的杂货店)。$scope.$broadcast
用于 $scope
本身及其子代。这是一个 child 对它的毛绒动物耳语,所以他们的 parent 听不到。
关于angularjs - $rootScope.$broadcast 与 $scope.$emit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26752030/