构造函数外部的角度/依赖注入

时间:2018-06-25 08:42:25

标签: angular typescript dependency-injection angular5

我上课

export class MyClass {

   constructor(data: any) {
     this.data = data;
  }
}

我也想这样注入ChangeDetectorRef。 constructor(data: any, cd: ChangeDetectorRef )

但是在这种情况下,我无法像这样const myClass = new MyClass(data)从MyClass创建对象 可以在构造函数外部注入ChangeDetectorRef吗?

3 个答案:

答案 0 :(得分:0)

只需将ChangeDetectorRef作为构造函数的可选参数

export class MyClass {
   constructor(data: any, cd?: ChangeDetectorRef ) {
     this.data = data;
  }
}

并像const myClass = new MyClass(data)

那样称呼它

编辑:

如果要在服务中使用ChangeDetectorRef,则将其作为组件的参数传递

export class MyComponent{
    constructor(cd : ChangeDetectorRef ){
       const myClass = new MyClass(data, cd);
    }
}

答案 1 :(得分:0)

您可以查看设置器:

export class MyClass {
   cdRef: ChangeDetectorRef;
   constructor(data: any) {
     this.data = data;
   }

   setCdRef(value: ChangeDetectorRef) { this.cdRef = value; }
}

答案 2 :(得分:0)

您还可以拥有一个setter方法,一旦获得正确的引用,就需要调用该方法。

export class MyClass 
{
    private cd: ChangeDetectorRef;
    constructor(data: any ) {
    this.data = data;
    }

    setChangeDetector(cd: ChangeDetectorRef )
    {
       this.cd = cd;
    }
}

其他选项

这不是不是依赖项注入,但是您还可以在初始化主模块时为ChangeDetectorRef分配全局引用

module.ts

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

  export let CDInstance: ChangeDetectorRef;

  export class AppModule
  {
    constructor(private cd: ChangeDetectorRef)
    {
      CDInstance = this.cd;
    }
  }

myclass.ts

import {InjectorInstance} from './app.module';

export class MyClass
{

  private cd: ChangeDetectorRef;

  constructor(data: any)
  {
    this.data = data;
    this.cd = CDInstance;
  }
}