既然 $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/

10-13 06:12