服务、指令和模块有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (54)

有时他们使用指令,有时使用服务。它总是以模块开始。有人能用一个例子来解释这三种类型之间的区别吗?

提问于
用户回答回答于

将模块看作是连接许多其他事物的地方,例如指令、服务、常量等。模块可以注入到其他模块中,从而具有高度的重用性。

服务主要是控制器之间通信的一种方式,但是可以将一个服务注入另一个服务。服务通常被用作访问数据存储的一种方式,人们将包装角度API,如ngResource。这种技术非常有用,因为它使测试(特别是模拟)变得非常容易。

指令用于创建小部件或包装现有的东西,如jQuery插件。包装现有的插件可能是一个挑战,你要这么做的原因是建立一个插件和角度之间的双向数据绑定。

指令也是执行DOM操作、捕捉DOM事件等的场所。不应该在控制器或服务中执行与DOM相关的操作。

用户回答回答于

模块

  • 提供一种用于命名空间/分组服务、指令、筛选器、配置信息和初始化代码的方法。
  • 帮助避免全局变量
  • 用于配置$喷射器,允许将由模块(或整个模块本身)定义的内容注入到其他地方(依赖注入)。
  • 角模块与CommonJS或Require.js无关。相对于AMD或Require.js模块,角模块并不试图解决脚本加载排序或延迟脚本获取的问题。这些目标是正交的,两个模块系统可以并排共存并实现它们的目标(所以docs声称)。

服务

  • 是单例,所以定义的每个服务只有一个实例。作为单个对象,它们不受作用域的影响,因此可以被多个视图/控制器/指令/其他服务访问(共享)。
  • 可以(而且可能应该)在下列情况下创建自定义服务:
    • 两件或两件以上的事情需要访问相同的数据(不要使用根范围),或者只是想将数据整齐地封装起来
    • 希望封装与Web服务器的交互(扩展服务中的$Resource或$http)

  • 内置服务以“$”开头。
  • 若要使用服务,则需要对依赖方(例如控制器、其他服务或指令)进行依赖注入。

指令(下面的一些内容基本上是一样的,但我发现,有时稍微不同的措辞会有很大帮助。)

  • 负责在模型状态更改时更新DOM。
  • 扩展HTML词汇表=教HTML新技巧。

  • 指令允许您“将HTML组件化”。指令通常比ng-包含更好。例如,当你开始用数据绑定编写大量HTML时,将该HTML重构成(可重用的)指令。
  • 角编译器允许您将行为附加到任何HTML元素或属性,甚至可以使用自定义行为创建新的HTML元素或属性。

  • 指令是由属性、元素名、类名或注释中的名称的存在触发的行为或DOM转换。指令是在(HTML)编译过程中遇到特定HTML结构时应该触发的行为。这些指令可以放在元素名称、属性、类名以及注释中。

扫码关注云+社区