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



我有一个类

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

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

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

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

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

其他选项

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

模块.ts

import {ChangeDetectorRef} from '@angular/core';
export let CDInstance: ChangeDetectorRef;
export class AppModule
{
constructor(private cd: ChangeDetectorRef)
{
CDInstance = this.cd;
}
}

我的类

import {InjectorInstance} from './app.module';
export class MyClass
{
private cd: ChangeDetectorRef;
constructor(data: any)
{
this.data = data;
this.cd = CDInstance;
}
}

你可以通过一个二传手:

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

只需将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);
}
}