首页 > 解决方案 > 在组件和依赖注入中使用类

问题描述

我使用 Angular 并拥有 1 个组件、1 个类和 1 个服务。

我的服务是一个@injectable 类,并且在 app.module.ts 中设置得很好。

@Injectable()
export class MyService {

我的班级将服务作为依赖注入获得。

import { MyService } from '../services/myService';

export class MyClass {
  constructor(
    myService: MyService
  ) {

在组件构造函数中,我尝试创建我的类 MyClass 的新实例。

export class MyComponent implements AfterViewInit {
  constructor(
  ) {
    const myClass = new MyClass();
  }

但我得到:“预期 1 个参数,但得到 0”。

所以我的问题是如何使用类并享受依赖注入?我对此一无所知。

或者,我必须在我的组件构造函数中添加依赖并将它们传递给我的类?

也许是一种更好的混合方式?

提前致谢,

标签: angularclassdependency-injection

解决方案


在您执行此操作之前,需要了解一些要点。

1) 你想与你的类和组件共享同一个服务实例吗?

如果是,那么您可以在您的 COMPONENT 中“提供”该服务并将该服务的实例传递给您的 CLASS。

@Component({
  selector: '',
  templateUrl: '',
  providers: [Provide your service here]
})
export class MyComponent implements AfterViewInit {
  constructor(serv: MyServ){
    const myClass = new MyClass(serv);
  }
}

请注意,如果您已经在模块中提供了服务,则无需在组件中再次提供。

这样做的好处是您现在与您的类和组件共享相同的服务实例。

2)如果您不想共享实例,您可以简单地在类构造函数中创建服务的新实例。

import { MyService } from '../services/myService';

export class MyClass {
  constructor(myService: MyService = new MyService()) {

  }
}

在这里,您为类构造函数提供了一个默认参数。因此,如果有人(在您的情况下为组件)传递服务实例,它将使用它,否则它将创建它自己的实例。


推荐阅读