加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularJS $在事件处理程序触发器顺序

发布时间:2020-12-17 08:24:18 所属栏目:安全 来源:网络整理
导读:我在想知道两件事情,在angularJS事件处理的上下文中。 如何定义触发相同事件的处理程序的顺序? 如果你开始怀疑这个,这是坏的设计的标志吗? 在阅读了有关角度$on,$broadcast and $emit以及本机DOM event flow的文档之后,我想我明白事件处理程序将以哪种
我在想知道两件事情,在angularJS事件处理的上下文中。

>如何定义触发相同事件的处理程序的顺序?
>如果你开始怀疑这个,这是坏的设计的标志吗?

在阅读了有关角度$on,$broadcast and $emit以及本机DOM event flow的文档之后,我想我明白事件处理程序将以哪种顺序在不同的范围内触发。问题是几个处理程序在不同的地方(例如,控制器与服务)在同一范围(例如$ rootScope)中进行监听。

为了说明这个问题,我将一个jsfiddle与一个控制器和两个服务组合在一起,所有这些都通过$ rootScope http://jsfiddle.net/Z84tX/进行通信

谢谢

很好的问题

事件处理程序按照初始化的顺序执行。

我以前没有想过这个,因为我的处理程序从来不需要先知道哪一个,但是通过你的小提琴我可以看到处理程序按照它们初始化的顺序被调用。

在你的小提琴你有一个控制器控制器A依赖于两个服务,ServiceA和ServiceB:

myModule
  .controller('ControllerA',[
      '$scope','$rootScope','ServiceA','ServiceB',function($scope,$rootScope,ServiceA,ServiceB) {...}
    ]
  );

这两个服务和控制器都定义一个事件监听器。

现在,所有依赖关系需要在注入之前解决,这意味着两个服务都将在注入到控制器之前被初始化。因此,在服务中定义的处理程序将被首先调用,因为服务工厂在控制器之前被初始化。

然后,您也可以观察到服务被初始化,以便它们被注入。所以ServiceA在ServiceB之前初始化,因为它们是按照该顺序注入到控制器中的。如果您在控制器签名中更改了订单,您将看到它们的启动顺序也被更改(ServiceB来自ServiceA)。

所以,在服务初始化之后,控制器也被初始化,并且与它一起定义了事件处理程序。

因此,最终结果是,在$ broadcast上,处理程序将按以下顺序执行:ServiceA处理程序,ServiceB处理程序,ControllerA处理程序。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读