Угловое / зависимое внедрение вне конструктора - PullRequest
0 голосов
/ 25 июня 2018

У меня есть класс

export class MyClass {

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

Я также хочу внедрить ChangeDetectorRef следующим образом.constructor(data: any, cd: ChangeDetectorRef )

Но в этом случае я не могу создать объект из MyClass следующим образом const myClass = new MyClass(data) Можно ли внедрить ChangeDetectorRef вне конструктора?

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Вы можете пройти через сеттер:

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

   setCdRef(value: ChangeDetectorRef) { this.cdRef = value; }
}
0 голосов
/ 25 июня 2018

У вас также может быть метод установки, который нужно будет вызывать после получения правильной ссылки.

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;
  }
}
0 голосов
/ 25 июня 2018

Просто сделайте 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);
    }
}
...