【问题标题】:How to inject class into Service [Angular 6]如何将类注入服务 [Angular 6]
【发布时间】:2020-02-10 03:57:09
【问题描述】:

我们能否将一个类(不是服务)作为共享实用程序,通过角度依赖注入将其注入到服务甚至组件中?

MyUtilClass

export class MyUtilClass{

  do(){
     // something
  }
}

我的服务

export class MyService{
  constructor(private uitl:MyUtilClass){
    util.do();
  }
}

【问题讨论】:

  • 使MyUtilClass @Injectable() 与使用MyServcie 的方式相同
  • 就像其他服务一样,服务可以相互注入。
  • 如果我们将 MyUtilClass 添加到提供者列表中,我们不需要添加 @Injectable 装饰器,对吧?除非我们使用providedIn

标签: angular typescript angular6


【解决方案1】:

服务是有一点附加差异的类(不是结构上的),它们有一个装饰器 @Injectable() 不多!您可以通过运行 Angular CLI 来提供服务

ng generate service service-name

它将被注入到你的另一个类中。享受吧!

【讨论】:

  • 我想将类注入服务
【解决方案2】:

Angular 中的服务只是一个类,因此您可以将任何类注入到任何类中

实用程序

import { Injectable } from '@angular/core';

@Injectable({providedIn:'root'})
export class Utility {
  constructor(){
    console.log('Utility is created');
  }
}

我的服务

import { Injectable } from '@angular/core';
import {Utility} from './utility'

@Injectable({providedIn:'root'})
export class MyServiceService {

  constructor(private uitl:Utility) { }

}

{providedIn:'root'} 在角度 6 中的功能中,另一种方法是将 MyServiceService 、 Utility 添加到 app.module.ts 中的提供者数组中,在这种情况下,您可以在 Utility 类中删除 @Injectable 装饰器

demo - check the console

【讨论】:

    【解决方案3】:

    您可以创建文件,例如util.ts 直接包含您的 utils 和导出功能,例如

    export function do() {
      //do something
    }
    

    接下来,它可能会被导入并用于您的服务。另一方面,您可以创建 MyUtilService 并将其提供给您的 MyService 而不是类,这是 Angular 推荐的方式。

    【讨论】:

    • 与问题无关
    猜你喜欢
    • 2019-03-04
    • 2020-06-03
    • 2017-08-24
    • 2022-11-22
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2017-05-11
    相关资源
    最近更新 更多