Использование универсального Компонента с результатом resolComponentFactory в Компоненте <{}> вместо <T> - PullRequest
0 голосов
/ 14 февраля 2019

Я создал диалоговую службу, которая динамически создает компонент DialogComponent с дочерним компонентом.

Я хочу, чтобы мой DialogComponent был универсальным классом <T>, так как я хочу напечатать для любого компонента-потомка, который я использую.В настоящее время я создаю свой DialogComponent, используя эти строки ->

const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DialogComponent);
const componentRef = componentFactory.create(new DialogInjector(this.injector, map));

Проблема заключается в том, что resolComponentFactory фактически возвращает DialogComponent<{}> вместо T.Я пытался разыграть, но, похоже, я не могу, потому что некоторые методы отсутствуют.

Мне интересно, как я мог бы достичь такой цели!

Спасибо.

РЕДАКТИРОВАТЬ

this.componentFactoryResolver.resolveComponentFactory<DialogComponent<T>> сделал трюки ..

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Чтобы получить нужные типы, вам нужно передать требуемый тип в общем наборе resolveComponentFactory:

this.componentFactoryResolver.resolveComponentFactory<DialogComponent<T>>(DialogComponent);
0 голосов
/ 14 февраля 2019

Если вы уверены в себе, просто пропустите проверку типов с помощью функции.

myFunction<T>(className: T): { componentFactory: T, componentRef: any } {
  const componentFactory: T = this
    .componentFactoryResolver
    .resolveComponentFactory(className) as any;
  const componentRef = componentFactory
    .create(new DialogInjector(this.injector, map));
  return { componentFactory, componentRef };
}

const { componentFactory, componentRef } = myFunction(DialogComponent);

Это может быть проблемой в определении типа платформы.Этот код - обходной путь, используйте его, если больше ничего не найдете.

...