angularJS $on 事件处理程序触发顺序

2023-12-30

在 AngularJS 事件处理的上下文中,我想知道两件事。

  1. 如何定义监听同一事件的处理程序的触发顺序?
  2. 如果您开始想知道这一点,这是设计不好的迹象吗?

阅读有关角度的文档后$on、$broadcast 和 $emit http://docs.angularjs.org/api/ng.%24rootScope.Scope以及本土的DOM 事件流 http://www.w3.org/TR/DOM-Level-3-Events/#event-flow我想我了解事件处理程序将在不同范围内触发的顺序。问题是当多个处理程序从不同位置(例如控制器与服务)在同一范围(例如 $rootScope)中侦听时。

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

Thanks


非常好的问题。

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

我以前没有真正考虑过这一点,因为我的处理程序从来不需要知道哪个先运行,但通过你的小提琴的外观,我可以看到处理程序的调用顺序与它们初始化的顺序相同。

在你的小提琴中你有一个控制器controllerA这取决于两个服务,ServiceA and ServiceB:

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

服务和控制器都定义了事件侦听器。

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

然后,您还可能会观察到服务按照注入的顺序进行初始化。所以ServiceA之前已初始化ServiceB因为它们是按顺序注入到控制器中的。如果您在控制器签名中更改了它们的顺序,您将看到它们的初始化顺序也发生了更改(ServiceB出现在之前ServiceA).

因此,在服务初始化后,控制器也会初始化,其中定义的事件处理程序也会随之初始化。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

angularJS $on 事件处理程序触发顺序 的相关文章

随机推荐

  • 一对一字段 Django 管理员

    编辑为使用一对一字段 我想将建筑物的面积添加到 django modeladmin 中 表结构是 class Area models Model id models IntegerField Buildings db column id a
  • Kubernetes Nginx Ingress 删除部分 URL

    我正在 Kubernetes 在 AKS 上 部署一个简单的应用程序 该应用程序位于使用 Nginx 的 Ingress 后面 并使用 Nginx helm 图表进行部署 我遇到一个问题 由于某种原因 Nginx 似乎没有将完整的 URL
  • AWS lambda读取zip文件执行验证并解压到s3存储桶(如果验证通过)

    我有一个 zip 文件到达 s3 存储桶的要求 我需要使用 python 编写一个 lambda 来读取 zip 文件 执行一些验证并在另一个 S3 存储桶上解压缩 Zip 文件包含以下内容 a csv b csv c csv trigge
  • 读取 HttpPost 响应

    我使用此代码向 http 服务器发送请求 HttpClient client new DefaultHttpClient HttpPost post new HttpPost http 192 168 0 1 test php HttpRe
  • 一步一步 oAuth Rest C# winform 示例 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经尝试了一段时间了 需要从头开始
  • XML RPC - 从 C# 调用 python 函数

    我正在使用库xml rpc net 2 5 0用于在 C 中创建调用一些 python 方法的 XML RPC 客户端 客户端位于Windows7机器中 服务器位于运行red hat的VMWare中 调用python函数的客户端代码 mai
  • 在另一个类中使用实例方法作为装饰器

    我正在尝试创建一个类 MySerial 实例化一个串行对象 以便我可以写入 读取串行设备 UART 有一个实例方法是一个装饰器 它包装了属于完全不同的类的函数 App 因此装饰器负责写入和读取串行缓冲区 如果我创建一个实例MySerial在
  • 如何在apache solr中以原始嵌套形式检索json?

    我在用阿帕奇 索尔 for 文本搜索 我有nested document structure 这是one json file id 1 info first name John last name Doe gender male 我创建了一
  • 将项目与 Eclipse 中的 Sonar 关联

    我有 Eclipse Indigo 3 7 基础和 MyEclipse 10 Java 企业开发插件 我已经为eclipse安装了Sonar插件 安装 Sonar 服务器并从本地主机 localhost 9000 本地运行它 在 Eclip
  • 并行调用 API,每分钟有硬性限制

    我正在尝试对 API 进行并行调用 在停止之前 API 的调用限制为每分钟 1 200 次 在低于限制的情况下异步最有效的方法是什么 def remove html tags text Remove html tags from a str
  • pip for python3.7 (Ubuntu 16.04) [重复]

    这个问题在这里已经有答案了 我无法为 python 3 7 安装 pip 当我尝试在线搜索时 我找到的一种解决方案是使用 get pip py 安装 pip 然而 它对我来说失败了 sudo python3 7 get pip py Tra
  • 如何使谷歌地图响应式?

    我正在尝试将 Google 地图添加到网页 但从使用 Google 教程的代码来看 它具有固定的宽度和高度 我的 HTML 头部是这样的
  • JavaFX 在野外?

    有人知道基于 JavaFX 的真实 Web 应用程序吗 我是一名经验丰富的 Java 程序员 正在考虑在日常工作之余创建一个网站 我在 UI 方面没有太多的专业知识 因此我正在寻找最好的方法来利用我现有的技能来创建可以提供出色的 RIA 体
  • 有没有办法分析 OpenCL 或 pyOpenCL 程序?

    我正在尝试优化 pyOpenCL 程序 出于这个原因 我想知道是否有一种方法可以分析程序并查看大部分时间都花在哪里 您知道如何解决这个问题吗 提前致谢 Andi 编辑 例如 用于 CUDA 的 nvidias nvprof 可以用于 pyC
  • EntityManagerFactory + jpadaosupport 的依赖注入问题

    现在 我在将EntityFactoryManager注入到我的jpadaosupport扩展类中时遇到问题 我的配置如下
  • 使用两个 yaml 文件进行配置属性

    我们正在使用 Spring Boot 应用程序 其中的属性是从application yml文件而不是application properties 位于src main resources 如下所示 config host localhos
  • 如何在类 Unix shell 中保存交互式命令行程序的输出?

    我正在用 C 语言编码并在 Linux 终端中运行程序 我想将程序的输出保存在 txt 文件中 我通常通过执行来做到这一点 a out gt filename txt 但我编写了一个交互式程序 其中我必须输入一个数字才能启动该程序 这种情况
  • vs2013 编译用于调试但不用于发布?

    我在VS2013中遇到了一些奇怪的事情 我的程序在调试模式下构建得很好 但在release模式下 会出现很多错误 例如 Error 2 error C2440 default argument cannot convert from con
  • 这些获取 DTE2 的方法有什么区别(Visual Studio 2013)

    基于这个问题 https stackoverflow com questions 4955009 getting the dte2 or teamfoundationserverext object in a vs package proj
  • angularJS $on 事件处理程序触发顺序

    在 AngularJS 事件处理的上下文中 我想知道两件事 如何定义监听同一事件的处理程序的触发顺序 如果您开始想知道这一点 这是设计不好的迹象吗 阅读有关角度的文档后 on broadcast 和 emit http docs angul