52 lines
1.6 KiB
JavaScript
Raw Normal View History

import {Promise, PromiseWrapper} from 'angular2/src/facade/async';
2015-05-03 20:25:04 -07:00
import {isBlank} from 'angular2/src/facade/lang';
import {Directive} from 'angular2/src/core/annotations_impl/annotations';
2015-05-03 20:25:04 -07:00
import {Attribute} from 'angular2/src/core/annotations_impl/di';
import {Compiler, ViewContainerRef} from 'angular2/core';
import {Injector, bind} from 'angular2/di';
import * as routerMod from './router';
import {Instruction, RouteParams} from './instruction'
@Directive({
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, @Attribute('name') nameAttr:String) {
2015-05-03 20:25:04 -07:00
if (isBlank(nameAttr)) {
nameAttr = 'default';
}
this._router = router;
this._viewContainer = viewContainer;
this._compiler = compiler;
this._injector = injector;
2015-05-03 20:25:04 -07:00
this._router.registerOutlet(this, nameAttr);
}
2015-05-14 15:24:35 +02:00
activate(instruction:Instruction): Promise {
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();
this._viewContainer.create(pv, 0, null, outletInjector);
});
}
2015-05-14 15:24:35 +02:00
canActivate(instruction:Instruction): Promise<boolean> {
return PromiseWrapper.resolve(true);
}
2015-05-14 15:24:35 +02:00
canDeactivate(instruction:Instruction): Promise<boolean> {
return PromiseWrapper.resolve(true);
}
}