Можем ли мы использовать функцию System.import или import () для любого файла Javascript или только для отдельных модулей js? - PullRequest
1 голос
/ 12 октября 2019

После замечательной статьи о динамической загрузке компонентов:

https://blog.angularindepth.com/here-is-what-you-need-to-know-about-dynamic-components-in-angular-ac1e96167f9e

Я хочу узнать больше об использовании System.import. Автор использует следующий синтаксис для загрузки файла javascript модуля для динамической загрузки.

System.import('../module1.module.js').then((module) => {
          this.compiler.compileModuleAndAllComponentsAsync(module.Module1Module)
              .then((compiled) => {
                  const factory = compiled.componentFactories[0];
                  this.container.createComponent(factory);
              });
      });

Я понимаю, что system.import используется для динамической загрузки модулей во время выполнения.

И в нашем случае мы предоставляем имя ts файла модуля, но поскольку файл js также будет иметь то же имя, мы можем указать это в параметрах функции импорта.

Но мне было интересно, если мымог бы предоставить общий JS-файл в параметре, который не обязательно содержит этот модуль, но также содержит больше модулей и компонентов. (Эти модули могут поступать из других внешних проектов / библиотек). Затем мы можем предоставить одно из названий модулей, например, следующее и создать компоненты.

System.import('../main-app1.js').then((module) => {
          this.compiler.compileModuleAndAllComponentsAsync(module.Module1Module)
              .then((compiled) => {
                  const factory = compiled.componentFactories[0];
                  this.container.createComponent(factory);
              });
      });

Я пробовал вышеуказанный подход, но он не работает для меня. Сбой во время выполнения.

core.js:9110 ERROR Error: Uncaught (in promise): Error: No NgModule metadata found for 'undefined'.
Error: No NgModule metadata found for 'undefined'.

1 Ответ

1 голос
/ 13 октября 2019

Итак, я обобщу свои выводы, чтобы в будущем кому-то это могло помочь:

  • Во-первых, да, мы можем предоставить общий файл JS в параметре System.import.

Это из-за того, что System.import - это не угловая вещь, а функция javascript / es.

Это не говорит о том, что вы можете предоставить только угловой модуль js (который у меня былнеправильное понимание ранее), но также и общий файл js.

  • Теперь причина, по которой я получаю ошибку, была из-за глупой ошибки в том, что js, который я передавал в качестве параметра, не содержал определениямодуль. Он был скомпилирован без ссылки на модуль, который я пытался загрузить.

Короче говоря, модуль не присутствовал в файле JS. Поэтому обязательно откройте файл js и проверьте, присутствует ли модуль, и вы по ошибке не забыли включить модуль в js.

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