我正在阅读https://blog.nrwl.io/essential-angular-ngmodules-16474ea99713作者:Victor Savkin,我在Lazyloading NgModuleFactoryLoader
上有点迷失。
延迟加载 正如我上面提到的,NgModules不仅仅是编译单元,它们也是分发的单位。这就是我们引导NgModule而不是组件的原因 - 我们不分发组件,我们分发模块。这也是我们懒惰加载NgModules的原因。
使用NgModuleFactoryLoader
NgModule的哪个部分.load()
内的参数path指向?
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
});
}
}
如何在 ExampleModule
内引用NgModuleFactoryLoader.load(???)
@NgModule({
imports: [ModuleA, ModuleB]
})
class ExampleModule {
constructor() {
}
}
答案 0 :(得分:2)
NgModule的哪一部分在.load()中的param路径指向?
它没有指向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';
}