【问题标题】:AngularJS: controller vs serviceAngularJS:控制器与服务
【发布时间】:2014-12-10 10:32:38
【问题描述】:

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

我特别关心的是控制器和服务的比较。但没有一篇文章告诉我控制器可以做什么服务不能做什么,反之亦然。

这可以列出来,还是只是 Angular 使用规范的问题?

【问题讨论】:

  • @JasonvanderZeeuw 公平地说,这是我在 google 上找到的第一个结果。所以OP通过询问为我提供了服务。
  • @JasonvanderZeeuw 你不能悄悄地传递链接吗?

标签: angularjs service controller


【解决方案1】:

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

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

【讨论】:

  • 所以关键字是persistence...谢谢。
  • 我会说持久性,以及使用 ng-controller="MyController as ctrl" 方法从视图中引用函数和变量的能力
  • 另一组关键字:共享代码/数据。除了持久性之外,服务的一个重要特性是它的代码可以很容易地在多个控制器/指令/组件/等之间共享。例如,在我现在正在构建的应用程序中,我有一个用于我的私有 REST API 的服务——这个服务可以在任何地方注入和使用。尝试用控制器做同样的事情会非常困难。
【解决方案2】:

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

服务 - 职责:提供依赖于视图或控制器的业务服务。它的主要关注点是提供服务,而不考虑消费者(控制器/视图/其他服务)。

我不相信持久性是否会导致差异。

【讨论】:

    【解决方案3】:

    根据 AngularJS 文档,https://docs.angularjs.org/guide/concepts

    控制器与视图相关的业务逻辑有关。另一方面,服务与独立于视图的可重用业务逻辑有关。

    【讨论】:

      【解决方案4】:

      除了上面所说的。当应用程序不是很大时,控制器也可以保存应用程序的逻辑。但是随着应用程序的增长,您需要移动逻辑以使用服务(如工厂)。这将使您的应用程序所需的变量和函数易于访问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 2015-11-11
        • 2017-10-11
        • 2014-05-02
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多