feat(core): add a component resolver that can load components lazily using system.js

This commit is contained in:
vsavkin
2016-05-04 10:45:48 -07:00
parent 0f1465b899
commit 1a0aea67a0
5 changed files with 26 additions and 1 deletions

View File

@ -19,6 +19,7 @@ export {
SourceModule, SourceModule,
NormalizedComponentWithViewDirectives, NormalizedComponentWithViewDirectives,
OfflineCompiler, OfflineCompiler,
RuntimeCompiler,
CompileMetadataWithIdentifier, CompileMetadataWithIdentifier,
CompileMetadataWithType, CompileMetadataWithType,
CompileIdentifierMetadata, CompileIdentifierMetadata,

View File

@ -1,5 +1,6 @@
// Public API for compiler // Public API for compiler
export {ComponentResolver} from './linker/component_resolver'; export {ComponentResolver} from './linker/component_resolver';
export {SystemJsComponentResolver} from './linker/systemjs_component_resolver';
export {QueryList} from './linker/query_list'; export {QueryList} from './linker/query_list';
export {DynamicComponentLoader} from './linker/dynamic_component_loader'; export {DynamicComponentLoader} from './linker/dynamic_component_loader';
export {ElementRef} from './linker/element_ref'; export {ElementRef} from './linker/element_ref';

View File

@ -0,0 +1,21 @@
import { ComponentResolver } from './component_resolver';
import { Type, isString, global } from '../../src/facade/lang';
import { ComponentFactory } from './component_factory';
/**
* Component resolver that can load components lazily
*/
export class SystemJsComponentResolver implements ComponentResolver {
constructor(private _resolver: ComponentResolver) {}
resolveComponent(componentType:string|Type):Promise<ComponentFactory<any>> {
if (isString(componentType)) {
return (<any>global).System.import(componentType).then(module =>
this._resolver.resolveComponent(module.default));
} else {
return this._resolver.resolveComponent(<Type>componentType);
}
}
clearCache() {}
}

View File

@ -140,6 +140,7 @@ var COMPILER: string[] = [
"DirectiveResolver", "DirectiveResolver",
"NormalizedComponentWithViewDirectives", "NormalizedComponentWithViewDirectives",
"OfflineCompiler", "OfflineCompiler",
"RuntimeCompiler",
"PipeResolver", "PipeResolver",
"ProviderAst", "ProviderAst",
"ProviderAstType", "ProviderAstType",
@ -185,6 +186,7 @@ var CORE: string[] = [
'ChangeDetectorRef', 'ChangeDetectorRef',
'Class:js', 'Class:js',
'ComponentResolver', 'ComponentResolver',
'SystemJsComponentResolver',
'Component', 'Component',
'ComponentMetadata', 'ComponentMetadata',
'ComponentRef', 'ComponentRef',

View File

@ -11,7 +11,7 @@ import {reflector} from '@angular/core';
// TODO: vsavkin: recognize should take the old tree and merge it // TODO: vsavkin: recognize should take the old tree and merge it
export function recognize(componentResolver: ComponentResolver, rootComponent: Type, export function recognize(componentResolver: ComponentResolver, rootComponent: Type,
url: UrlTree): Promise<RouteTree> { url: UrlTree): Promise<RouteTree> {
let matched = new _MatchResult(rootComponent, [url.root], null, rootNode(url).children, []); let matched = new _MatchResult(rootComponent, [url.root], {}, rootNode(url).children, []);
return _constructSegment(componentResolver, matched).then(roots => new RouteTree(roots[0])); return _constructSegment(componentResolver, matched).then(roots => new RouteTree(roots[0]));
} }