我的ANGLE应用程序中有一个服务,它的构造函数中需要两个依赖项:UntyedFormGroup和DestroyRef.目前,我正在将这些依赖项直接注入模块中的服务构造函数.

现在,我希望找到一种方法,将这些依赖项从组件提供给服务,而不是将它们注入组件的构造函数.

以下是我的简化服务:

@Injectable()
export class CalculateFieldsService {
  constructor(
    private jsonForm: UntypedFormGroup,
    private destroy: DestroyRef
  ) {
    // Service constructor
  }

  // Rest of the service code...
}

我如何才能传递这两个参数.从供应商或如何我可以?

我感谢任何关于如何有效地实现这一点的指导或例子.感谢您的帮助!

推荐答案

你可以使用Angular的Dependency Injection系统.您可以try 使用工厂函数来提供服务.

@Injectable()
export class CalculateFieldsService {
  constructor(
    private jsonForm: UntypedFormGroup,
    private destroy: DestroyRef
  ) {
    // Service constructor
  }

  // Rest of the service code...
}

export function CalculateFieldsServiceFactory(jsonForm: UntypedFormGroup, destroy: DestroyRef) {
  return new CalculateFieldsService(jsonForm, destroy);
}

在组件中,您可以配置组件修饰器中的提供程序,以使用工厂函数提供依赖项和服务.

import { Component, Injectable, Inject } from '@angular/core';

@Component({
  selector: 'app-your-component',
  templateUrl: './your-component.component.html',
  providers: [
    {
      provide: CalculateFieldsService,
      useFactory: CalculateFieldsServiceFactory,
      deps: [UntypedFormGroup, DestroyRef]
    }
  ]
})
export class YourComponent {
  constructor(private calculateFieldsService: CalculateFieldsService) {
    // You can now use the service with the provided dependencies.
  }
}

Angular相关问答推荐

HTTP POST响应失败Angular 16

如果Rxjs间隔请求仍在进行,则不应重置,但如果用户更改输入,则应重置

自定义垫日历中选定的日期(Angular material )

VS 2022 停留在运行 Angular 应用程序上

如何检测 Angular Universal 预渲染版本?

Nx Angular Monorepo 中 cypress 组件测试的代码覆盖率?

如何根据响应变化更改 Angular Carousel 的cellsToShow

Angular 无法从后端获取数据到前端

多个 Mat Paginator 在 Angular 组件中不起作用

为什么 Redux 中的对象应该是不可变的?

*ngIf 和 *ngFor 在 元素上使用

运行 npm 测试(Angular 2 单元测试)后无法读取未定义的属性 subscribe

Angular 2.0 中 $scope 的替代品

Error: Module not found: Error: Can't resolve '@angular/cdk/scrolling'

如何测试 Angular2 的 router.navigate?

如何处理解析器中的错误

Angular 4.3拦截器不起作用

设置 Angular Material Tooltip 的字体大小

Firestore 从集合中获取文档 ID

Angular2:无法读取未定义的属性名称