Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular NgModule的哪个部分满足NgModuleFactoryLoader.load(???)的路径参数_Angular_Dependency Injection - Fatal编程技术网

Angular NgModule的哪个部分满足NgModuleFactoryLoader.load(???)的路径参数

Angular NgModule的哪个部分满足NgModuleFactoryLoader.load(???)的路径参数,angular,dependency-injection,Angular,Dependency Injection,我正在阅读维克多·萨夫金的著作,我对懒散的加载NgModuleFactoryLoader有点迷茫 延迟加载 正如我前面提到的,模块不仅仅是编译单元,它们也是分发单元。这就是为什么我们引导一个NgModule,而不是一个组件 — 我们不分发组件,我们分发模块。这就是为什么我们也懒散地加载NgModules 使用NgModuleFactoryLoader时,.load()中的参数指向NgModule的哪个部分 import {NgModuleFactoryLoader, Injector} from

我正在阅读维克多·萨夫金的著作,我对懒散的加载
NgModuleFactoryLoader
有点迷茫

延迟加载 正如我前面提到的,模块不仅仅是编译单元,它们也是分发单元。这就是为什么我们引导一个NgModule,而不是一个组件 — 我们不分发组件,我们分发模块。这就是为什么我们也懒散地加载NgModules

使用
NgModuleFactoryLoader
时,
.load()中的参数指向NgModule的哪个部分

import {NgModuleFactoryLoader, Injector} from '@angular/core';

class MyService {
  constructor(loader: NgModuleFactoryLoader, injector: Injector) {
    loader.load("mymodule").then((f: NgModuleFactory) => {
      const moduleRef = f.create(injector);
      moduleRef.injector; // module injector
      moduleRef.componentFactoryResolver; // all the components factories of the lazy-loaded module
    });
  }
}
问题: 如何引用
示例模块
的内部
NgModuleFactoryLoader.load(?)

.load()中的参数路径指向NgModule的哪个部分

import {NgModuleFactoryLoader, Injector} from '@angular/core';

class MyService {
  constructor(loader: NgModuleFactoryLoader, injector: Injector) {
    loader.load("mymodule").then((f: NgModuleFactory) => {
      const moduleRef = f.create(injector);
      moduleRef.injector; // module injector
      moduleRef.componentFactoryResolver; // all the components factories of the lazy-loaded module
    });
  }
}
它不指向NgModule,而是指向用于获取JS模块/文件的URL

如何在中引用ExampleModule NgModuleFactoryLoader.load(???)

您需要使用
#
分隔符:

 loader.load("path/to/module#ExportedModuleName")
这可以从以下来源中看出:

const _SEPARATOR = '#';

export class SystemJsNgModuleLoader implements NgModuleFactoryLoader {
  private _config: SystemJsNgModuleLoaderConfig;

  constructor(private _compiler: Compiler, @Optional() config?: SystemJsNgModuleLoaderConfig) {
  ...
  private loadAndCompile(path: string): Promise<NgModuleFactory<any>> {
    let [module, exportName] = path.split(_SEPARATOR); <-----
    if (exportName === undefined) {
      exportName = 'default';
    }
const _SEPARATOR='#';
导出类SystemJsNgModuleLoader实现NgModuleFactoryLoader{
私有配置:SystemJsNgModuleLoaderConfig;
构造函数(私有_编译器:编译器,@Optional()配置?:SystemJsNgModuleLoaderConfig){
...
私有loadAndCompile(路径:string):承诺{

让[module,exportName]=path.split(_分隔符);@estus我还没有。你能提供一个例子吗…我也不太清楚如何使用它。是NgModuleRef.injector.get(?)你到底想完成什么?如果你只是想实现延迟加载,你不需要所有这些。@DeborahK试图完全理解这篇文章。我没有其他意图。这可能会让你感兴趣。嘿,Max!你知道SystemJsNgModuleLoader是否可以用于加载在另一个项目,不是使用它们的项目?我正在寻找一种使用AOT编译库项目的方法,将它们的组件用作主应用程序中的插件。我已经设法使用JIT编译器和SystemJs loader完成了这项工作,但由于应用程序将变得非常大,我也需要找到一种使用AOT的方法。@IvanSt,我想不起来任何能阻止它的事情。看到这个演讲了吗