【问题标题】:Angular 2 service : correct use caseAngular 2 服务:正确的用例
【发布时间】:2017-07-18 13:21:24
【问题描述】:

在过去的 2 个月里,我一直在学习 Angular 2,但我对这些服务的使用有点困惑。如果我正在开发一个包含多个组件的应用程序,并且每个组件都有一组数据要从 Web 服务显示,如果它们构建在同一模型上,我是否可以使用单个服务来显示数据,或者我是否应该通过以下方式创建一个服务组件?

在此先感谢您对我的启发

【问题讨论】:

  • 是的,您可以为所有组件使用一项服务,前提是它是可注入的。
  • 你有关于这些主题的任何例子吗,因为我昨天发布了一个问题,似乎没有人知道它是如何工作的
  • 你看过 angular.io 上的“英雄之旅”吗?它提供了一个示例,说明如何在组件中使用来自单个服务的数据。你可以扩展那里展示的概念来做几乎任何事情。
  • 服务非常简单。您可以从这里开始:angular.io/tutorial/toh-pt4。创建一个服务,给它Injectable装饰器,不要忘记在app.module.ts中的providers数组中声明它,注入组件的构造函数constructor(private iCanUseIt: MyService){}并像this.iCanUseIt.serviceFunctionOrProp一样使用它

标签: angular angular-services


【解决方案1】:

服务类(提供者)用@Injectable 修饰,可以是:

  • 您在提供程序的@ngModule 中的app-module.ts 中定义它们的单例:[] 数组
  • 注入@Component 装饰器,用于单个服务无法执行的用例。

如果您的服务包含状态,那么单例可能会导致副作用,这时您会将它们放入 @Component

这里的文档具有误导性。向下滚动到元数据属性:查看“提供者:”

您可以拥有无​​状态服务,例如通过始终返回 Observables。

即在 HTML 模板后面的组件 Typescript 中订阅被调用的服务。

  • 组件类具有可观察的属性
  • html 模板结合aysnc pipe 使用可观察的类属性。 |异步

【讨论】:

    【解决方案2】:

    您可以在许多组件中使用服务,而无需为每个组件创建唯一的服务。

    angular2 reference:

    无需一遍又一遍地复制和粘贴相同的代码,您将 创建一个可重用的数据服务并将其注入 需要它的组件。

    此外,服务是单例的,组件中的所有实例都是相同的(它基于分层注入器)。

    【讨论】:

    • 'A service is a singleton' 严格来说并不正确。取决于您使用的是有状态服务还是无状态服务。看我的回答。否则我同意你的回答,因为关于不重复自己的部分是对这个线程的有效补充。
    猜你喜欢
    • 2017-06-11
    • 2020-09-02
    • 2018-10-19
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2016-03-21
    相关资源
    最近更新 更多