2015-04-17 09:59:56 -07:00
|
|
|
import {Promise, PromiseWrapper} from 'angular2/src/facade/async';
|
|
|
|
|
2015-04-28 18:17:00 -07:00
|
|
|
import {Decorator} from 'angular2/src/core/annotations_impl/annotations';
|
2015-04-17 09:59:56 -07:00
|
|
|
import {Compiler, ViewContainerRef} from 'angular2/core';
|
|
|
|
import {Injector, bind} from 'angular2/di';
|
|
|
|
|
|
|
|
import * as routerMod from './router';
|
|
|
|
import {Instruction, RouteParams} from './instruction'
|
|
|
|
|
|
|
|
@Decorator({
|
|
|
|
selector: 'router-outlet'
|
|
|
|
})
|
|
|
|
export class RouterOutlet {
|
|
|
|
_compiler:Compiler;
|
|
|
|
_injector:Injector;
|
|
|
|
_router:routerMod.Router;
|
|
|
|
_viewContainer:ViewContainerRef;
|
|
|
|
|
|
|
|
constructor(viewContainer:ViewContainerRef, compiler:Compiler, router:routerMod.Router, injector:Injector) {
|
|
|
|
this._router = router;
|
|
|
|
this._viewContainer = viewContainer;
|
|
|
|
this._compiler = compiler;
|
|
|
|
this._injector = injector;
|
|
|
|
this._router.registerOutlet(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
activate(instruction:Instruction) {
|
|
|
|
return this._compiler.compileInHost(instruction.component).then((pv) => {
|
|
|
|
var outletInjector = this._injector.resolveAndCreateChild([
|
|
|
|
bind(RouteParams).toValue(new RouteParams(instruction.params)),
|
|
|
|
bind(routerMod.Router).toValue(instruction.router)
|
|
|
|
]);
|
|
|
|
|
|
|
|
this._viewContainer.clear();
|
2015-04-29 15:07:55 -07:00
|
|
|
this._viewContainer.create(pv, 0, outletInjector);
|
2015-04-17 09:59:56 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
canActivate(instruction:any) {
|
|
|
|
return PromiseWrapper.resolve(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
canDeactivate(instruction:any) {
|
|
|
|
return PromiseWrapper.resolve(true);
|
|
|
|
}
|
|
|
|
}
|