我在想知道两件事情,在angularJS事件处理的上下文中。
>如何定义触发相同事件的处理程序的顺序?
>如果你开始怀疑这个,这是坏的设计的标志吗?
在阅读了有关角度$on,$broadcast and $emit以及本机DOM event flow的文档之后,我想我明白事件处理程序将以哪种顺序在不同的范围内触发。问题是几个处理程序在不同的地方(例如,控制器与服务)在同一范围(例如$ rootScope)中进行监听。
为了说明这个问题,我将一个jsfiddle与一个控制器和两个服务组合在一起,所有这些都通过$ rootScope http://jsfiddle.net/Z84tX/进行通信
谢谢
很好的问题
原文链接:https://www.f2er.com/angularjs/145011.html事件处理程序按照初始化的顺序执行。
我以前没有想过这个,因为我的处理程序从来不需要先知道哪一个,但是通过你的小提琴我可以看到处理程序按照它们初始化的顺序被调用。
在你的小提琴你有一个控制器控制器A依赖于两个服务,ServiceA和ServiceB:
myModule .controller('ControllerA',[ '$scope','$rootScope','ServiceA','ServiceB',function($scope,$rootScope,ServiceA,ServiceB) {...} ] );
这两个服务和控制器都定义一个事件监听器。
现在,所有依赖关系需要在注入之前解决,这意味着两个服务都将在注入到控制器之前被初始化。因此,在服务中定义的处理程序将被首先调用,因为服务工厂在控制器之前被初始化。
然后,您也可以观察到服务被初始化,以便它们被注入。所以ServiceA在ServiceB之前初始化,因为它们是按照该顺序注入到控制器中的。如果您在控制器签名中更改了订单,您将看到它们的启动顺序也被更改(ServiceB来自ServiceA)。
所以,在服务初始化之后,控制器也被初始化,并且与它一起定义了事件处理程序。
因此,最终结果是,在$ broadcast上,处理程序将按以下顺序执行:ServiceA处理程序,ServiceB处理程序,ControllerA处理程序。