diff --git a/modules/@angular/router/src/directives/router_outlet.ts b/modules/@angular/router/src/directives/router_outlet.ts new file mode 100644 index 0000000000..35f5f3d76c --- /dev/null +++ b/modules/@angular/router/src/directives/router_outlet.ts @@ -0,0 +1,30 @@ +import {Directive, ViewContainerRef, Attribute, ComponentRef, ComponentFactory, ResolvedReflectiveProvider, ReflectiveInjector} from '@angular/core'; +import {RouterOutletMap} from '../router_outlet_map'; +import {PRIMARY_OUTLET} from '../router_state'; + +@Directive({selector: 'router-outlet'}) +export class RouterOutlet { + private activated:ComponentRef|null; + public outletMap:RouterOutletMap; + + constructor(parentOutletMap:RouterOutletMap, private location:ViewContainerRef, + @Attribute('name') name:string) { + parentOutletMap.registerOutlet(name ? name : PRIMARY_OUTLET, this); + } + + get isActivated(): boolean { return !!this.activated; } + + deactivate(): void { + if (this.activated) { + this.activated.destroy(); + this.activated = null; + } + } + + activate(factory: ComponentFactory, providers: ResolvedReflectiveProvider[], + outletMap: RouterOutletMap): void { + this.outletMap = outletMap; + let inj = ReflectiveInjector.fromResolvedProviders(providers, this.location.parentInjector); + this.activated = this.location.createComponent(factory, this.location.length, inj, []); + } +}