现在,之间的性能差异$broadcast
和$emit
已被淘汰,没有任何理由,更喜欢$scope.$emit
到$rootScope.$broadcast
?
他们是不同的,是的。
$emit
仅限于范围层次结构(向上)-如果它适合您的设计,这可能很好,但是在我看来,这是一个相当随意的限制。
$rootScope.$broadcast
在所有 选择 收听此活动的人中都有效,这在我看来是一个更为明智的限制。
我想念什么吗?
编辑:
为了对回答做出澄清,调度的方向不是我要解决的问题。$scope.$emit
向上调度事件,$scope.$broadcast
-向下调度事件。但是,为什么不总是使用它$rootScope.$broadcast
来覆盖所有预期的听众呢?
tl; dr (此tl; dr来自 @sp00m的以下答案)
$emit
向上$broadcast
调度事件…向下调度事件
详细说明
$rootScope.$emit
只让其他$rootScope
听众抓住它。当您不希望所有人$scope
都得到它时,这很好。主要是高层沟通。可以将它想象为成年人在房间里互相交谈,以使孩子听不到他们的声音。
$rootScope.$broadcast
是一种几乎可以让所有人听到的方法。这相当于父母大喊大叫晚饭准备好了,这样屋子里的每个人都会听到。
$scope.$emit
是当您想要它$scope
及其所有父母并$rootScope
听到事件的时候。这是一个孩子在家里向父母抱怨(但不在其他孩子可以听到的杂货店里)。
$scope.$broadcast
是为了$scope
自身及其子孙。这是一个对动物毛绒玩具说悄悄话的孩子,所以他们的父母听不到。
问题内容: 有人可以帮我了解应使用和的方式。 我知道它主要是用于听取不同的作用域($ rootScope和$ scope)。 我的查询适用于以下情况: 我应该使用: $ rootScope。$ emit 与 $ rootScope。$ on 要么 我应该选择: $ rootScope。$ with $ scope。$ on 广播 。 我知道这不是一个好选择,因为它将广播给所有obj。 要么 我应该
问题内容: 我在AngularJS .run下有以下代码,该代码在我的本地开发计算机上可以正常运行,但在上传到客户端服务器后将无法工作…经过几次测试,很明显,在加载控制器时,事件并未尚未触发,因此取决于此事件的控制器中的大多数功能均无法正常工作。有人可以告诉我我在做什么错以及如何解决吗?谢谢 问题答案: 你总是要有一个比赛条件。我可以选择几种替代方法: 1)使用服务。我并不是这个选项的忠实支持者,
问题内容: 我在控制器中看到$ scope有$ root,这是什么?与可以注入控制器的$ rootScope有何不同? 问题答案: var指向所有作用域的父级,可以在任何地方注入。所有其他范围是的子级。它们是通过的方法创建的,因此每个范围都继承自。 在构造函数 的定义中的角度源中有一行: 似乎var只是创建的第一个作用域- 的占位符。 接下来是这段代码在方法: 因此,每个作用域子对象的var 都是
本文向大家介绍AnjularJS中$scope和$rootScope的区别小结,包括了AnjularJS中$scope和$rootScope的区别小结的使用技巧和注意事项,需要的朋友参考一下 一句话总结: $rootScope针对全局的作用域生效 $scope只针对当前的controller作用域生效 用下面的例子来证明上述的说法: 定义一个模块名为myApp 创建oneCon
问题内容: 试图找到AngularJS的一些基本信息,但是AngularJS文档并没有太大帮助。简单地说,我们为什么要使用它? 同样,在约翰·帕帕(John Papa)的Hot Towel模板中,通用模块中有一个自定义函数: 我不明白这是怎么回事。因此,这是几个基本问题: 1)怎么办? 2)和之间有什么区别? 问题答案: 怎么办? 正在通过应用程序范围发送事件。该应用程序的任何子级范围都可以使
问题内容: 在AngularJS范围内。在每个事件处理程序(输入指令的keydown / input事件,select指令的change事件等)上调用$ apply()。 看小例子。似乎ngRepeat在每次击键时都会重新计算并重绘,尽管事实是另一个作用域发生了更改。 知道这种决定的理由将是很有趣的。 问题答案: 希望有AngularJS的作者来做,但是我相信$ digest()必须在$ root