【问题标题】:Why do we need services in angular为什么我们需要 Angular 服务
【发布时间】:2019-09-18 10:46:06
【问题描述】:

所以从 React.js 毕业后,我开始学习 Angular。在我看来,很多事情都不必要过于复杂,为什么我需要将组件导入文件和角度应用程序。 现在我想我明白了主要思想,Angular 是一个完整的包(或应用程序),它提供了比 React 更多的功能,并且它的所有组件都需要获得奖励。

但我仍然不明白我们为什么需要服务。我了解服务的想法和概念,我可以创建具有所有用户调用的“UserService”并将其注入不同的组件。但是如果我把所有的功能都放到一个普通的js填充中,然后导入到组件中,会不会一样呢?

我将澄清我的问题,在 Angular 应用程序中使用 Angular 服务而不是导出所有功能的常规 js 填充是否有任何优势或需要?

【问题讨论】:

  • 因为我经历了许多框架,服务用于编写您的业务逻辑或可重用代码。组件不应该直接获取或保存数据,当然也不应该故意提供虚假数据。他们应该专注于呈现数据并将数据访问委托给服务。参考:angular.io/tutorial/toh-pt4#why-services
  • @Vicky Charanpahari 不重复。这家伙建议将所有内容保存在同一个文件中。我理解分离的想法,而不是角度的“服务”想法
  • 但是如果我将所有功能都放入一个常规的 js 填充中并导入到组件中,会不会一样? - 不。您可能已经使用 DI 模式或带有 HOC、上下文或 Redux 提供程序的容器来实现与 Angular 服务相同的目的。另见martinfowler.com/articles/injection.html
  • @estus 可能,不确定 webpack 在构建 react 应用程序时是否这样做

标签: javascript angular angular-services


【解决方案1】:

服务是单例的(特别是向根注入器注册的服务)。

服务有用的一些原因:

  1. 最佳做法是将诸如 HTTP 请求之类的逻辑与仅控制 UI 与数据交互方式的实际组件分开。
  2. Injector 确保注入服务的每个组件都获得相同的实例,因此它允许诸如跨组件共享数据之类的事情。
  3. 它允许Dependency Injection

【讨论】:

  • 而如果我将登录分离在一个不是服务的常规js中并导出到组件中,会不会有什么不同?
  • 服务只创建一次,并且只有 1 个服务实例将用于您的应用程序。除非您将服务注册为组件范围的服务,否则它将根据组件的生命周期进行实例化。当您想在多个组件中使用相同的服务时,会出现更多情况,直接将其导出到组件中会导致单独的实例。
  • 哦!就像为您管理它一样吗?导入只会将代码添加到每个文件中。你知道我在哪里可以阅读更多关于这些东西的信息吗,我搜索了一些关于角度服务的信息,但没有找到任何深入的解释
  • 是的,通过构造函数注入服务将为您提供对 rootInjector 中已经实例化的服务的引用。您可以从官方文档中了解Dependency InjectionService Architecture
  • JS 模块(尤其是 ES 模块)可以自然地提供单例。
【解决方案2】:

使用服务可帮助您隔离控制器执行业务逻辑、通信和存储相关的事情,因为服务旨在用于业务逻辑或与存储使用的服务器通信。

使用这种方法,您仅将控制器用于视图管理、数据绑定、表单验证、用户交互等,并单独关注 Angular 应用程序的可测试性,这就是您可以编写单元测试(如 Karma)的原因更容易。

Controller 是一个构造函数,就像一个类一样工作,Angular 每次创建视图时都会创建控制器的新实例,并在视图被销毁时销毁控制器。控制器不适合在整个应用程序生命周期中保存应用程序数据。这就是为什么不应该直接在视图中使用服务,而是需要将它们注入到控制器中。服务不应操纵 DOM 对象,无论是 HTML 还是 CSS。

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2010-11-24
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2015-10-15
    • 2019-06-09
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多