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,我想不起来任何能阻止它的事情。看到这个演讲了吗