AngularJS:控制器 vs 服务

40

我已经阅读了几篇关于使用angularjs实体(服务、工厂、控制器和指令)的正确方法的帖子。

我特别关注控制器和服务的比较。然而,没有一篇文章告诉我控制器可以做到服务不能做到的事情,反之亦然。

这些差异是否可以列出或者只是在angular的使用上具有规范性?


5
公平地说,这是我在Google搜索时找到的第一个结果。因此,提问者通过询问为我提供了帮助。 - dwjohnston
1
@JasonvanderZeeuw 你不能悄悄地传递链接吗? - mshwf
4个回答

80

控制器通常用于与视图绑定。控制器管理视图的生命周期,应被视为视图控制器。每个视图实例都会创建一个新的控制器,这意味着如果您从某个视图导航到其他视图,然后再返回 - 或者如果您有多个相同视图的实例,则每次都会创建一个新的控制器。

服务通常用作应用程序的业务逻辑。服务类似于单例,因为它们只需创建一次,并在整个应用程序的生命周期中保持其实例。它是放置许多视图或组件所需的逻辑函数的好地方,并且还具有全局缓存,需要在应用程序的多个区域中访问。


7
关键词是 persistence(坚持不懈)...谢谢。 - user776686
我认为持久性和使用ng-controller="MyController as ctrl"方法从视图引用函数和变量的能力是重要的。 - Gil Moshayof
1
另一组关键字:共享代码/数据。除了持久性外,服务的一个重要特点是其代码可以轻松地在多个控制器/指令/组件等之间共享。例如,在我现在构建的应用程序中,我有一个私有REST API的服务 - 这个服务可以被注入和在任何地方使用。尝试使用控制器做同样的事情会变得不必要地困难。 - rinogo

18

控制器 - 职责:初始化视图,调节视图/作用域与服务之间的交互。它依赖于视图和模型,但更关心视图并使其正常工作。

服务 - 职责:提供业务服务,不依赖于视图或控制器。其主要关注点是提供服务,无论消费者是谁(控制器、视图、其他服务)。

我不确定持久化是否影响了这些差异。


15

2
除了以上所说的内容,控制器还可以在应用程序不太大的情况下承担应用程序的逻辑。但是随着您的应用程序增长,您需要将逻辑移动到使用服务(如工厂)的位置。这将使得您应用程序中需要访问的变量和函数更容易访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接