mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
feat(util): system.js ng-module loader
system.js ng-module loader
This commit is contained in:
49
src/util/module-loader.ts
Normal file
49
src/util/module-loader.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { ComponentFactoryResolver, Injectable, Injector, OpaqueToken, Type } from '@angular/core';
|
||||
import { NgModuleLoader } from './ng-module-loader';
|
||||
|
||||
export const LAZY_LOADED_TOKEN = new OpaqueToken('LZYCMP');
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
@Injectable()
|
||||
export class ModuleLoader {
|
||||
|
||||
constructor(
|
||||
private _ngModuleLoader: NgModuleLoader,
|
||||
private _injector: Injector) {}
|
||||
|
||||
|
||||
load(modulePath: string): Promise<LoadedModule> {
|
||||
console.time(`ModuleLoader, load: ${modulePath}'`);
|
||||
|
||||
const splitString = modulePath.split(SPLITTER);
|
||||
|
||||
return this._ngModuleLoader.load(splitString[0], splitString[1])
|
||||
.then(loadedModule => {
|
||||
console.timeEnd(`ModuleLoader, load: ${modulePath}'`);
|
||||
const ref = loadedModule.create(this._injector);
|
||||
|
||||
return {
|
||||
componentFactoryResolver: ref.componentFactoryResolver,
|
||||
component: ref.injector.get(LAZY_LOADED_TOKEN)
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const SPLITTER = '#';
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
export function provideModuleLoader(ngModuleLoader: NgModuleLoader, injector: Injector) {
|
||||
return new ModuleLoader(ngModuleLoader, injector);
|
||||
}
|
||||
|
||||
|
||||
export interface LoadedModule {
|
||||
componentFactoryResolver: ComponentFactoryResolver;
|
||||
component: Type<any>;
|
||||
};
|
||||
Reference in New Issue
Block a user