Как скомпилировать сгенерированный во время выполнения код Angular8? - PullRequest
1 голос
/ 10 апреля 2020

Я создаю Angular код во время выполнения, в частности, я использую библиотеку SVG для создания векторной графики c, которая содержит Angular кодовых директив, таких как (click)='myMethod()', которые, в свою очередь, вызывают методы, которые я статически определил в SVG-компоненте. Будучи сгенерированным во время выполнения, мне нужно скомпилировать созданный шаблон и добавить его в компонент. Я реализовал такой код тогда с помощью Angular 3 с помощью этого поста , что было довольно громоздко. Я попытался скопировать старый код в приложении Angular 8:

private addComponent(template: string) {

    @Component({template: template + ' <div #target></div>'})
    class TemplateComponent {

      @ViewChild('target', {static: false, read: ViewContainerRef}) public target;

      constructor() {
      }

      public myMethod() {
        // do something     
      }
    }

    @NgModule({declarations: [TemplateComponent]})
    class TemplateModule {
      @ViewChild('target', {static: false, read: ViewContainerRef}) public target;
    }

    // ERROR in next line:
    const mod = this.compiler.compileModuleAndAllComponentsSync(TemplateModule);
    const factory = mod.componentFactories.find((comp) =>
        comp.componentType === TemplateComponent
    );
    this.container.createComponent(factory);
}

, которое теперь не работает с

Ошибка: ошибка: компилятор времени выполнения не загружен в Compiler._throwError (core. js: 38932)

С одной стороны, я понятия не имею, почему возникает эта ошибка. Все, что я нашел в inte rnet, было о критическом синтаксисе функции при отложенной загрузке модуля. С другой стороны, интересно, если пять Angular основных версий позже, есть другой способ сделать это. Я читал о Portals , но, похоже, речь идет о динамической загрузке шаблонов stati c, а не нескомпилированных шаблонов, сгенерированных на лету. С нетерпением жду, когда кто-нибудь направит меня в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...