哪一个是更好的解决方案$ rootScope。$ emit或$ scope。$ broadcast?

时间:2015-07-01 05:44:54

标签: angularjs angularjs-scope

我试图从父控制器触发一个事件,子控制器应该听它。使用角度事件框架有两种方法去

方法1

parentcontroller

<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

childController

$scope.$broadcast("eventToChild");

方法2

parentcontroller

$scope.$on("eventToChild",function({console.log("received event");})

childController

$rootScope.$emit("eventToChild");

我了解$rootScope.$on("eventToChild",function({console.log("received event");}) 只会在$rootscope.$emit上调用侦听器,我们可以使用$rootscope停止传播事件,鉴于此事实event.stopPropagation()如何能够更好解决方案比$scope.$broadcast

这两者中哪一个是更好的解决方案,为什么?

2 个答案:

答案 0 :(得分:0)

它们之间没有更好的性能差异。但不同之处仅在于它的用法。

$ broadcast用于向下播放事件,$ emit用于向上发送事件。

接下来,你说$ emit只能用$ rootScope工作是错误的。它也适用于$ scope。

有关它们的详细信息,请参阅差异here

答案 1 :(得分:0)

他们只是以不同的方式工作。

广播从元素下降到任何试图捕捉事件的人;在罗茨望远镜的情况下,每个范围都低于它,因此每个人都能抓住并对待它;虽然发射是儿童范围上升的方式。通常,如果您想在与父项相关的条件/范围参数中触发事件,您将使用广播 - 而如果您想将其与子项的那些一起使用,则您将使用emit

相关问题