Как внедрить массив класса через Injector.create - PullRequest
0 голосов
/ 19 марта 2020

У меня есть компонент:

export class PhotoComponent implements OnInit {
 constructor(private foo:Foo[]) { 
      console.log(this.foo);
    }
}

Я пытаюсь динамически визуализировать этот компонент в родительском компоненте, как показано ниже:

export class AlbumComponent implements OnInit {

  //_ctr definition and other not relevant code


  dynamicComponent:any = PhotoComponent
  injector:any = createInjector(this.foolist);
  createInjector(foolist) {
    let injector = Injector.create([
      { provide: Foo, useClass: Foo, useValue: foolist, multi:true}
    ], this.injector);
    return injector;
  }
}

и в album.component. html:

<ng-container *ngComponentOutlet="dynamicComponent;injector:injector"> </ng-container>

все это работает, если Foo не массив. Так как мне ввести массив?

1 Ответ

0 голосов
/ 20 марта 2020

Мне удалось решить мою проблему.

Концепция:

, поэтому в основном Angular Injector создает экземпляр данного класса но ему нужен провайдер, который скажет ему, как создать этот класс. Кроме того, при этом вы можете указать, какое значение оно должно иметь. Таким образом, вместо того, чтобы ожидать, что Injector создаст массив экземпляра, я просто создал больший класс-обертку с моими значениями, и он работал, то есть:

  • создал новую обертку:

    @Injectable()
    export class WrapperClass {
        bar: Bar;
        foo: Foo[]
    }
    
  • и обновленное создание инжектора, как показано ниже:

    createInjector(bar, foo) {
        const wrapper: Wraper = { bar: bar, foo: foo };
        let injector = Injector.create([
          { provide: Wrapper, useClass: Wrapper, useValue: wrapper }
        ], this.injector);
        return injector;
     }
    
  • и обновленный компонент для динамической визуализации, как показано ниже:

    export class PhotoComponent implements OnInit {
         constructor(private wrapper:Wrapper) { 
              console.log(this.wrapper.foo);
          }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...