test nav pushing and popping

This commit is contained in:
Andrew
2015-03-30 14:19:30 -06:00
parent 33b43ee340
commit ace419d505
2 changed files with 72 additions and 13 deletions

View File

@ -1,6 +1,4 @@
<ion-nav> <ion-nav>
<my-page> <my-page>
<button class="button button-stable">Push</button>
<button class="button button-stable">Pop</button>
</my-page> </my-page>
</ion-nav> </ion-nav>

View File

@ -2,42 +2,103 @@ import {bootstrap} from 'angular2/core'
import {Component, Template, NgElement, Parent} from 'angular2/angular2' import {Component, Template, NgElement, Parent} from 'angular2/angular2'
import {TemplateResolver} from 'angular2/src/core/compiler/template_resolver' import {TemplateResolver} from 'angular2/src/core/compiler/template_resolver'
import {Compiler} from 'angular2/src/core/compiler/compiler' import {Compiler} from 'angular2/src/core/compiler/compiler'
import {ElementInjector} from 'angular2/src/core/compiler/element_injector'
import {EventManager} from 'angular2/src/core/events/event_manager' import {EventManager} from 'angular2/src/core/events/event_manager'
import {NavView} from 'ionic2/components/nav-view/nav-view' import {NavView} from 'ionic2/components/nav-view/nav-view'
import {View} from 'ionic2/components/view/view' import {View} from 'ionic2/components/view/view'
import {Log} from 'ionic2/util' import {Log} from 'ionic2/util'
import {PrivateComponentLocation} from 'angular2/src/core/compiler/private_component_location'
import {PrivateComponentLoader} from 'angular2/src/core/compiler/private_component_loader'
import {DirectiveMetadataReader} from 'angular2/src/core/compiler/directive_metadata_reader'
import {ShadowDomStrategy} from 'angular2/src/core/compiler/shadow_dom_strategy'
@Component({ @Component({
selector: 'my-page' selector: 'my-page'
}) })
@Template({ @Template({
inline: 'Hello, inside page!' inline: '<div>Hello, inside page {{num}}</div>'
}) })
export class InsidePage { export class InsidePage {
constructor(
ele: NgElement,
@Parent() myPage: MyPage
) {
console.log(myPage)
this.num = Math.random()
ele.domElement.style.backgroundColor = `rgba(255,0,0,${this.num})`
}
} }
@Component({ @Component({
selector: 'my-page', selector: 'my-page',
services: [TemplateResolver, Compiler] services: [Compiler, PrivateComponentLocation]
}) })
@Template({ @Template({
inline: "<div><h2>I'm a page!</h2><content></content></div>" inline: `<div><h2>I'm a page!</h2>
<button class="button" (click)="push()">Push</button>
<button class="button" (click)="pop()">Pop</button>
</div>`
}) })
export class MyPage extends View { export class MyPage {
constructor( constructor(
@NgElement() ele:NgElement, @NgElement() ele:NgElement,
eventManager: EventManager,
compiler: Compiler, compiler: Compiler,
hostElementInjector: ElementInjector, location: PrivateComponentLocation,
eventManager: EventManager loader: PrivateComponentLoader,
reader: DirectiveMetadataReader,
shadowDomStrategy: ShadowDomStrategy
) { ) {
super(ele) this.ele = ele
compiler.compile(InsidePage).then(function(protoView) { this.location = location
debugger; this.loader = loader
this.reader = reader
this.compiler = compiler
this.eventManager = eventManager
this.shadowDomStrategy = shadowDomStrategy
this._children = []
}
push() {
let childInjector = this.location._elementInjector._proto.instantiate(
/* parent */ this.location._elementInjector,
/* host */ null
)
let childContainer = document.createElement('div')
childContainer.classList.add('test-child-container')
this.ele.domElement.appendChild(childContainer)
let childNgElement = new NgElement(childContainer)
childInjector._preBuiltObjects = this.location._elementInjector._preBuiltObjects
childInjector._preBuiltObjects.element = childNgElement
let annotation = this.reader.read(InsidePage).annotation
this.compiler.compile(InsidePage).then((protoView) => {
let context = childInjector.createPrivateComponent(InsidePage, annotation);
let view = protoView.instantiate(childInjector, this.eventManager)
view.hydrate(childInjector.getShadowDomAppInjector(), childInjector, null, context, null)
this.shadowDomStrategy.attachTemplate(childNgElement.domElement, view)
this.location._view.componentChildViews.push(view)
this.location._view.changeDetector.addChild(view.changeDetector)
this._children.push({
remove() {
view.dehydrate()
childContainer.parentNode.removeChild(childContainer)
}
})
}) })
} }
} pop() {
var last = this._children.pop()
if (!last) return;
last.remove()
}
}
@Component({ selector: '[ion-app]' }) @Component({ selector: '[ion-app]' })
@Template({ @Template({