我试图从父控制器触发一个事件,子控制器应该听它。使用角度事件框架有两种方法去
方法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
。
这两者中哪一个是更好的解决方案,为什么?
答案 0 :(得分:0)
它们之间没有更好的性能差异。但不同之处仅在于它的用法。
$ broadcast用于向下播放事件,$ emit用于向上发送事件。
接下来,你说$ emit只能用$ rootScope工作是错误的。它也适用于$ scope。
有关它们的详细信息,请参阅差异here。
答案 1 :(得分:0)
他们只是以不同的方式工作。
广播从元素下降到任何试图捕捉事件的人;在罗茨望远镜的情况下,每个范围都低于它,因此每个人都能抓住并对待它;虽然发射是儿童范围上升的方式。通常,如果您想在与父项相关的条件/范围参数中触发事件,您将使用广播 - 而如果您想将其与子项的那些一起使用,则您将使用emit