首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >服务、指令和模块的区别是什么?

服务、指令和模块的区别是什么?
EN

Stack Overflow用户
提问于 2012-06-24 02:05:07
回答 2查看 66.7K关注 0票数 154

我已经阅读了很多文档,我越来越困惑。我基本上搞不清楚

  • service
  • directive
  • module

我看到了很多自定义组件。有时他们使用指令,有时使用服务。它总是以模块开头。有没有人能举例说明这三种类型之间的区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 08:00:43

可以将模块看作是连接许多其他东西的地方,例如指令、服务、常量等。模块可以注入到其他模块中,从而实现更高级别的重用。

当编写一个angular应用程序时,你会有一个顶层模块,这是你的应用程序代码(没有模板)。

服务主要是控制器之间通信的一种方式,但您可以将一个服务注入到另一个服务中。服务通常被用作访问您的数据存储的一种方式,人们会包装angular API,例如ngResource。这种技术非常有用,因为它使得测试(特别是mocking)变得非常容易。您可以使用服务来执行其他操作,如身份验证、日志记录等。

指令用于创建小部件或包装现有的东西,如jquery插件。包装现有的插件可能是一个挑战,你这样做的原因是为了在插件和angular之间建立一个双向数据绑定。如果您不需要双向数据绑定,那么就不需要包装它们。

指令也是进行DOM操作、捕获DOM事件等的地方。你不应该在控制器或服务中做与DOM相关的事情。创建指令可能会变得非常复杂。我建议你先看看API,看看能不能做你想做的事情,或者向Angular的Google Group寻求建议。

票数 125
EN

Stack Overflow用户

发布于 2012-11-21 04:57:49

来自我自己的personal notes (主要是来自文档、谷歌群组帖子等帖子的片段):

模块

  • 提供了一种命名空间/组服务、指令、过滤器、配置信息和初始化代码的方法
  • 帮助避免使用全局变量
  • 来配置$injector,允许将模块(或整个模块本身)定义的内容注入到其他地方(依赖注入a模块与CommonJS或Require.js无关)。与AMD或Require.js模块相反,Angular模块不会尝试解决脚本加载顺序或懒惰脚本获取的问题。这些目标是正交的,两个模块系统可以并存并实现它们的目标(文档声称如此)。

服务

  • 是单例的,因此您定义的每个服务只有一个实例。作为单例,它们不受作用域的影响,因此可以由多个视图/控制器/指令/其他服务访问(共享)当
    • 两个或多个对象需要访问相同数据时(不使用根作用域),或者您只想整洁地封装要与web服务器进行交互的data
    • (在web服务器中扩展$resource或$http )时,您可以(并且可能应该)创建自定义服务

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

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

当模型的状态=教changes

  • extend新技巧时,
  • 负责更新DOM。

Angular附带了一组内置的指令(例如ng-* stuff),这些指令对构建web应用程序很有用,但您可以添加自己的指令集,以便将HTML转换为声明性领域特定语言(DSL)。例如,Angular主页演示“创建组件”上的和元素。-不明显的内置指令(因为它们不是以“ng”开头的):a,form,input,script,select,textarea。在Angular下,所有这些都比正常情况下做得更多!

HTML允许你“组件化”。指令通常比ng-include更好。例如,当你开始编写大量主要是数据绑定的超文本标记语言时,将超文本标记语言重构为(可重用的) directives.

  • The Angular编译器允许你将行为附加到任何超文本标记语言元素或属性,甚至创建具有自定义行为的新超文本标记语言元素或属性。Angular将这些行为扩展称为指令。
    • 归根结底,指令只是一个函数,当Angular编译器在Angular中遇到它时,它就会执行

  • 指令是由属性、元素名、类名或注释中的名称触发的行为或DOM转换。指令是在( HTML )编译过程中遇到特定HTML构造时应触发的行为。指令可以放在元素名、属性、类名和注释中。
    • 大多数指令仅限于属性。例如,DoubleClick只使用自定义属性directives.

另请参阅What is an angularjs directive?

在模块中定义和分组角度的东西(依赖注入的东西)。

共享数据并将web服务器交互封装在服务中。

在指令中扩展HTML和DOM操作。

并使控制器尽可能地“薄”。

票数 237
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11171778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档