mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-20 12:29:55 +08:00
80 lines
2.0 KiB
JavaScript
80 lines
2.0 KiB
JavaScript
import {DynamicComponent, Parent, NgElement} from 'angular2/angular2'
|
|
import {Optional} from 'angular2/src/di/annotations'
|
|
import {NavViewport} from 'ionic2/components/nav-viewport/nav-viewport'
|
|
import {Tab} from 'ionic2/components/tabs/tab'
|
|
import {PrivateComponentLoader} from 'angular2/src/core/compiler/private_component_loader'
|
|
import {PrivateComponentLocation} from 'angular2/src/core/compiler/private_component_location'
|
|
|
|
@DynamicComponent({
|
|
selector: '.nav-view',
|
|
bind: {
|
|
item: 'item'
|
|
}
|
|
})
|
|
export class NavView {
|
|
constructor(
|
|
loader: PrivateComponentLoader,
|
|
location: PrivateComponentLocation,
|
|
@NgElement() element: NgElement,
|
|
|
|
// FIXME: this is temporary until ng2 lets us inject tabs as a NavViewport
|
|
@Optional() @Parent() viewportNav: NavViewport,
|
|
@Optional() @Parent() viewportTab: Tab
|
|
) {
|
|
this.loader = loader
|
|
this.location = location
|
|
this.viewport = viewportTab || viewportNav
|
|
this.domElement = element.domElement
|
|
}
|
|
|
|
set item(navItem) {
|
|
if (this.initialized) return;
|
|
this.initialized = true;
|
|
this.Class = navItem.Class;
|
|
this.loader.load(navItem.Class, this.location).then(instance => {
|
|
this.instance = instance
|
|
navItem.finishSetup(this, instance)
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Push out of this view into another view
|
|
*/
|
|
push(Class: Function, opts = {}) {
|
|
return this.viewport.push(Class, opts)
|
|
}
|
|
|
|
/**
|
|
* Go back
|
|
*/
|
|
pop(opts) {
|
|
return this.viewport.pop(opts)
|
|
}
|
|
|
|
popTo(index, opts) {
|
|
return this.viewport.popTo(index, opts)
|
|
}
|
|
}
|
|
|
|
/*
|
|
beforePush()
|
|
beforePop()
|
|
beforeReenter()
|
|
beforePushedOut()
|
|
|
|
beforeEnter()
|
|
afterEnter()
|
|
beforeLeave()
|
|
afterLeave()
|
|
|
|
splitView:
|
|
|
|
beforeEnter: setup this view as the side view, next view in main area.
|
|
|
|
- any time a push happens in this view, bring the new component into the main view.
|
|
- any time a pop happens in this view, actually pop the stack (if we can).
|
|
|
|
any time a push happens in the main view, act normally.
|
|
the main view thinks it is the first component in the stack (does it have its own nav-viewport?)
|
|
*/
|