Compare commits

..

19 Commits

Author SHA1 Message Date
Manuel Mtz-Almeida
8dc08f9c1f fix(select): _inputUpdated should not be called manually 2017-06-28 17:23:54 +02:00
mhartington
bc7bb21f1a docs(menu): fix link to menucontroller 2017-06-28 11:04:09 -04:00
Dan Bucholtz
016b90da47 fix(tabs): use segment if it exists even if component exists 2017-06-27 14:20:17 -05:00
Dan Bucholtz
0f5c47db15 feature(navigation): better browser back/forward button support
* test(nav): add third page to nav/simple-nav

* progress

* workin'

* updates

* updates
2017-06-27 07:16:49 -05:00
Jan Piotrowski
86495e111d docs(api): angularjs to angular
Closes #12101
2017-06-23 10:54:10 -04:00
Dan Bucholtz
fba6ff0638 add href for additional testing 2017-06-20 15:18:00 -05:00
Dan Bucholtz
30f69c8a16 fix(navigation): fallback to name if component does not exist on segment 2017-06-20 14:51:38 -05:00
Dan Bucholtz
1beef75c80 refactor(navigation): refactor nav-controller-base to maintain backwards compatibility 2017-06-20 13:26:22 -05:00
Dan Bucholtz
58e1d79518 refactor(app): refactor app slightly to maintain backwards compatibility 2017-06-20 13:26:02 -05:00
Dan Bucholtz
0480f73f8e chore(nav): fix lint errors in test 2017-06-20 10:28:21 -05:00
Dan Bucholtz
f39c3811c5 fix(navigation): add isTab check to getSegmentsFromNav 2017-06-20 10:22:49 -05:00
Brandy Carney
6f7acdbddf docs(changelog): fix broken commit links 2017-06-20 10:29:02 -04:00
Dan Bucholtz
bcc85d9144 chore(build): fix path issue in snapshot test 2017-06-19 16:40:44 -05:00
Dan Bucholtz
00fbded168 chore(build): strictly enforce metadata 2017-06-19 16:40:23 -05:00
Dan Bucholtz
5cad96570f feature(navigation): modify urls to support multiple root level navs/tabs
* wip

* wip

* progress

* wippy skippy

* getting there

* all tests passing except goBack

* unit tests pass again boi

* goBack tests pass

* great success

* the good stuff
2017-06-19 16:29:55 -05:00
Manu Mtz.-Almeida
e3a8d27ec1 fix(select): floating label
fixes #12068
2017-06-19 19:41:17 +02:00
Brandy Carney
d8b65da6ac chore(ionic): release 3.4.2 2017-06-16 13:25:23 -04:00
Brandy Carney
70b5b6b5e5 fix(rtl): use multi direction in order to override the default ltr 2017-06-16 13:10:13 -04:00
Brandy Carney
5094feec89 chore(ionic): release 3.4.1 2017-06-16 12:19:45 -04:00
202 changed files with 4443 additions and 1288 deletions

View File

@@ -1,3 +1,23 @@
<a name="3.4.2"></a>
## [3.4.2](https://github.com/ionic-team/ionic/compare/v3.4.1...v3.4.2) (2017-06-16)
### Bug Fixes
* **rtl:** use multi direction in order to override the default ltr ([70b5b6](https://github.com/ionic-team/ionic/commit/70b5b6))
<a name="3.4.1"></a>
## [3.4.1](https://github.com/ionic-team/ionic/compare/v3.4.0...v3.4.1) (2017-06-16)
### Bug Fixes
* **themes:** change default app-direction ([1ca7df](https://github.com/ionic-team/ionic/commit/1ca7df))
<a name="3.4.0"></a>
# [3.4.0](https://github.com/ionic-team/ionic/compare/v3.3.0...v3.4.0) (2017-06-15)
@@ -19,7 +39,7 @@
"@ionic-native/splash-screen": "3.12.1",
"@ionic-native/status-bar": "3.12.1",
"@ionic/storage": "2.0.1",
"ionic-angular": "3.4.0",
"ionic-angular": "3.4.2",
"ionicons": "3.0.0",
"rxjs": "5.4.0",
"sw-toolbox": "3.6.0",

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "ionic2",
"version": "3.4.0",
"version": "3.4.2",
"description": "A powerful framework for building mobile and progressive web apps with JavaScript and Angular",
"keywords": [
"ionic",
@@ -22,7 +22,8 @@
"scripts": {
"test": "gulp validate",
"test:generators": "jasmine-node ./tooling/spec",
"link": "gulp release.prepareReleasePackage && cd dist/ionic-angular && npm link"
"link": "gulp release.prepareReleasePackage && cd dist/ionic-angular && npm link",
"tsc": "tsc --outdir .tmp"
},
"dependencies": {
"@angular/common": "4.1.3",

View File

@@ -7,7 +7,7 @@ path: ""
category: api
id: api
title: Javascript
header_sub_title: Extend Ionic even further with the power of AngularJS
header_sub_title: Extend Ionic even further with the power of Angular
searchable: false
---
@@ -15,9 +15,6 @@ searchable: false
<img class="section-header" src="/img/docs/api-intro-header.png" />
Ionic takes everything you know and loved about Ionic V1, and builds on top of it to provide a much more flexible framework.
In the API docs, you'll find two kinds of doc pages: Component and Service APIs.
The Component APIs include classes like `Checkbox`, `Toggle` or `Item` and show you how to use them, in addition to listing their selectors, available properties and events.

View File

@@ -6,9 +6,10 @@ import * as Constants from './app-constants';
import { ClickBlock } from './click-block';
import { runInDev, assert } from '../../util/util';
import { Config } from '../../config/config';
import { isNav, NavOptions, DIRECTION_FORWARD, DIRECTION_BACK } from '../../navigation/nav-util';
import { NavOptions, DIRECTION_FORWARD, DIRECTION_BACK, isTabs } from '../../navigation/nav-util';
import { MenuController } from './menu-controller';
import { NavController } from '../../navigation/nav-controller';
import { NavigationContainer } from '../../navigation/navigation-container';
import { NavControllerBase } from '../../navigation/nav-controller-base';
import { Platform } from '../../platform/platform';
import { ViewController } from '../../navigation/view-controller';
import { IOSTransition } from '../../transitions/transition-ios';
@@ -28,7 +29,7 @@ export class App {
private _scrollTime: number = 0;
private _title: string = '';
private _titleSrv: Title = new Title(DOCUMENT);
private _rootNav: NavController = null;
private _rootNavs = new Map<string, NavigationContainer>();
private _disableScrollAssist: boolean;
private _didScroll = false;
@@ -207,26 +208,59 @@ export class App {
/**
* @return {NavController} Returns the active NavController. Using this method is preferred when we need access to the top-level navigation controller while on the outside views and handlers like `registerBackButtonAction()`
*/
getActiveNav(): NavController {
getActiveNav(navId?: string): NavControllerBase {
const portal = this._appRoot._getPortal(Constants.PORTAL_MODAL);
if (portal.length() > 0) {
return findTopNav(portal);
return <NavControllerBase> findTopNav(portal);
}
return findTopNav(this._rootNav || null);
if (!this._rootNavs || !this._rootNavs.size) {
return null;
}
if (this._rootNavs.size === 1) {
return <NavControllerBase> findTopNav(this._rootNavs.values().next().value);
}
return <NavControllerBase> findTopNav(this.getRootNavById(navId));
}
getRootNav(): any {
console.warn('(getRootNav) is deprecated and will be removed in the next major release. Use getRootNavById instead.');
const rootNavs = this.getRootNavs();
if (rootNavs.length === 0) {
return null;
} else if (rootNavs.length > 1) {
console.warn('(getRootNav) there are multiple root navs, use getRootNavs instead');
}
return rootNavs[0];
}
getRootNavs(): any[] {
const navs: NavigationContainer[] = [];
this._rootNavs.forEach(nav => navs.push(nav));
return navs;
}
/**
* @return {NavController} Returns the root NavController
*/
getRootNav(): NavController {
return this._rootNav;
getRootNavById(navId: string): NavigationContainer {
return this._rootNavs.get(navId);
}
/**
* @hidden
*/
_setRootNav(nav: any) {
this._rootNav = nav;
registerRootNav(nav: NavigationContainer) {
this._rootNavs.set(nav.id, nav);
}
getActiveNavContainers(): NavigationContainer[] {
// for each root nav container, get it's active nav
const list: NavigationContainer[] = [];
this._rootNavs.forEach((container: NavigationContainer) => {
list.push(findTopNav(container));
});
return list;
}
/**
@@ -266,7 +300,7 @@ export class App {
}
const navPromise = this.navPop();
if (navPromise === null) {
if (!navPromise) {
// no views to go back to
// let's exit the app
if (this._config.getBoolean('navExitApp', true)) {
@@ -281,7 +315,7 @@ export class App {
* @hidden
*/
navPop(): Promise<any> {
if (!this._rootNav || !this.isEnabled()) {
if (!this._rootNavs || this._rootNavs.size === 0 || !this.isEnabled()) {
return Promise.resolve();
}
@@ -290,9 +324,23 @@ export class App {
if (portal.length() > 0) {
return Promise.resolve();
}
// next get the active nav, check itself and climb up all
// of its parent navs until it finds a nav that can pop
return recursivePop(this.getActiveNav());
let navToPop: NavControllerBase = null;
let mostRecentVC: ViewController = null;
this._rootNavs.forEach((navContainer: NavigationContainer) => {
const activeNav = this.getActiveNav(navContainer.id);
const poppable = getPoppableNav(activeNav);
if (poppable) {
const topViewController = poppable.last();
if (poppable._isPortal || (topViewController && poppable.length() > 1 && (!mostRecentVC || topViewController._ts >= mostRecentVC._ts))) {
mostRecentVC = topViewController;
navToPop = poppable;
}
}
});
if (navToPop) {
return navToPop.pop();
}
}
/**
@@ -351,34 +399,34 @@ export class App {
}
function recursivePop(nav: any): Promise<any> {
function getPoppableNav(nav: NavControllerBase): NavControllerBase {
if (!nav) {
return null;
}
if (isNav(nav)) {
var len = nav.length();
if (len > 1 || (nav._isPortal && len > 0)) {
// this nav controller has more than one view
// pop the current view on this nav and we're done here
console.debug('app, goBack pop nav');
return nav.pop();
}
if (isTabs(nav)) {
// tabs aren't a nav, so just call this function again immediately on the parent on tabs
return getPoppableNav(nav.parent);
}
const len = nav.length();
if (len > 1 || (nav._isPortal && len > 0)) {
// this nav controller has more than one view
// use this nav!
return nav;
}
// try again using the parent nav (if there is one)
return recursivePop(nav.parent);
return getPoppableNav(nav.parent);
}
function findTopNav(nav: NavController) {
var activeChildNav: any;
function findTopNav(nav: NavigationContainer): NavigationContainer {
while (nav) {
activeChildNav = nav.getActiveChildNav();
if (!activeChildNav) {
const childNav = nav.getActiveChildNav();
if (!childNav) {
break;
}
nav = activeChildNav;
nav = childNav;
}
return nav;
}

View File

@@ -6,6 +6,7 @@ import { DeepLinker } from '../../navigation/deep-linker';
import { DomController } from '../../platform/dom-controller';
import { GestureController } from '../../gestures/gesture-controller';
import { NavControllerBase } from '../../navigation/nav-controller-base';
import { NavigationContainer } from '../../navigation/navigation-container';
import { Platform } from '../../platform/platform';
import { TransitionController } from '../../transitions/transition-controller';
import { ViewController } from '../../navigation/view-controller';
@@ -16,7 +17,7 @@ import { ViewController } from '../../navigation/view-controller';
@Directive({
selector: '[overlay-portal]',
})
export class OverlayPortal extends NavControllerBase {
export class OverlayPortal extends NavControllerBase implements NavigationContainer {
constructor(
@Inject(forwardRef(() => App)) app: App,
config: Config,
@@ -55,4 +56,17 @@ export class OverlayPortal extends NavControllerBase {
this.destroy();
}
/*
* @private
*/
getType() {
return 'portal';
}
/*
* @private
*/
getSecondaryIdentifier(): string {
return null;
}
}

View File

@@ -11,12 +11,12 @@ describe('App', () => {
describe('goBack', () => {
it('should not select the previous tab', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
let tabs = mockTabs();
let tab1 = mockTab(tabs);
let tab2 = mockTab(tabs);
const tabs = mockTabs();
const tab1 = mockTab(tabs);
const tab2 = mockTab(tabs);
tab1.root = 'Page1';
tab2.root = 'Page2';
@@ -44,71 +44,79 @@ describe('App', () => {
});
it('should pop from the active tab, when tabs is nested is the root nav', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
let tabs = mockTabs();
mockTab(tabs);
let tab2 = mockTab(tabs);
const tabs = mockTabs();
mockTab(tabs);
nav.registerChildNav(tabs);
const tab1 = mockTab(tabs);
const tab2 = mockTab(tabs);
tab2.setSelected(true);
spyOn(plt, 'exitApp');
spyOn(tab2, 'pop');
spyOn(tab1, 'pop').and.returnValue(Promise.resolve());
spyOn(tab2, 'pop').and.returnValue(Promise.resolve());
spyOn(portal, 'pop');
let view1 = mockView();
let view2 = mockView();
const view1 = mockView();
const view2 = mockView();
tab2._views = [view1, view2];
tab1._views = [mockView()];
app.goBack();
expect(tab1.pop).not.toHaveBeenCalled();
expect(tab2.pop).toHaveBeenCalled();
expect(portal.pop).not.toHaveBeenCalled();
expect(plt.exitApp).not.toHaveBeenCalled();
});
it('should pop from the active tab, when tabs is the root', () => {
let tabs = mockTabs();
const tabs = mockTabs();
mockTab(tabs);
let tab2 = mockTab(tabs);
mockTab(tabs);
app._setRootNav(tabs);
app.registerRootNav(tabs);
const tab1 = mockTab(tabs);
const tab2 = mockTab(tabs);
tab2.setSelected(true);
spyOn(plt, 'exitApp');
spyOn(tab2, 'pop');
spyOn(tab1, 'pop').and.returnValue(Promise.resolve());
spyOn(tab2, 'pop').and.returnValue(Promise.resolve());
let view1 = mockView();
let view2 = mockView();
const view1 = mockView();
const view2 = mockView();
tab2._views = [view1, view2];
app.goBack();
expect(tab1.pop).not.toHaveBeenCalled();
expect(tab2.pop).toHaveBeenCalled();
expect(plt.exitApp).not.toHaveBeenCalled();
});
it('should pop the root nav when nested nav has less than 2 views', () => {
let rootNav = mockNavController();
let nestedNav = mockNavController();
rootNav.registerChildNav(nestedNav);
const rootNav = mockNavController();
app.registerRootNav(rootNav);
const nestedNav = mockNavController();
nestedNav.parent = rootNav;
app._setRootNav(rootNav);
rootNav.registerChildNav(nestedNav);
spyOn(plt, 'exitApp');
spyOn(rootNav, 'pop');
spyOn(nestedNav, 'pop');
spyOn(portal, 'pop');
spyOn(rootNav, 'pop').and.returnValue(Promise.resolve());
spyOn(nestedNav, 'pop').and.returnValue(Promise.resolve());
spyOn(portal, 'pop').and.returnValue(Promise.resolve());
let rootView1 = mockView();
let rootView2 = mockView();
const rootView1 = mockView();
const rootView2 = mockView();
mockViews(rootNav, [rootView1, rootView2]);
let nestedView1 = mockView();
const nestedView1 = mockView();
mockViews(nestedNav, [nestedView1]);
app.goBack();
@@ -120,22 +128,22 @@ describe('App', () => {
});
it('should pop a view from the nested nav that has more than 1 view', () => {
let rootNav = mockNavController();
let nestedNav = mockNavController();
app._setRootNav(rootNav);
const rootNav = mockNavController();
const nestedNav = mockNavController();
app.registerRootNav(rootNav);
rootNav.registerChildNav(nestedNav);
spyOn(plt, 'exitApp');
spyOn(rootNav, 'pop');
spyOn(nestedNav, 'pop');
spyOn(nestedNav, 'pop').and.returnValue(Promise.resolve());
spyOn(portal, 'pop');
let rootView1 = mockView();
let rootView2 = mockView();
const rootView1 = mockView();
const rootView2 = mockView();
mockViews(rootNav, [rootView1, rootView2]);
let nestedView1 = mockView();
let nestedView2 = mockView();
const nestedView1 = mockView();
const nestedView2 = mockView();
mockViews(nestedNav, [nestedView1, nestedView2]);
app.goBack();
@@ -147,18 +155,18 @@ describe('App', () => {
});
it('should pop the overlay in the portal of the root nav', (done: Function) => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
spyOn(plt, 'exitApp');
spyOn(nav, 'pop');
spyOn(portal, 'pop').and.returnValue(Promise.resolve());
let view1 = mockView();
let view2 = mockView();
const view1 = mockView();
const view2 = mockView();
mockViews(nav, [view1, view2]);
let overlay1 = mockView();
const overlay1 = mockView();
mockViews(portal, [overlay1]);
app.goBack().then(() => {
@@ -173,15 +181,15 @@ describe('App', () => {
});
it('should pop the second view in the root nav', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
spyOn(plt, 'exitApp');
spyOn(nav, 'pop');
spyOn(nav, 'pop').and.returnValue(Promise.resolve());
spyOn(portal, 'pop');
let view1 = mockView();
let view2 = mockView();
const view1 = mockView();
const view2 = mockView();
mockViews(nav, [view1, view2]);
app.goBack();
@@ -192,17 +200,17 @@ describe('App', () => {
});
it('should exit app when only one view in the root nav', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
spyOn(plt, 'exitApp');
spyOn(nav, 'pop');
spyOn(portal, 'pop');
let view1 = mockView();
const view1 = mockView();
mockViews(nav, [view1]);
expect(app.getActiveNav()).toBe(nav);
expect(app.getActiveNav(nav.id)).toBe(nav);
expect(nav.first()).toBe(view1);
app.goBack();
@@ -213,8 +221,8 @@ describe('App', () => {
});
it('should not exit app when only one view in the root nav, but navExitApp config set', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
spyOn(plt, 'exitApp');
spyOn(nav, 'pop');
@@ -222,10 +230,10 @@ describe('App', () => {
config.set('navExitApp', false);
let view1 = mockView();
const view1 = mockView();
mockViews(nav, [view1]);
expect(app.getActiveNav()).toBe(nav);
expect(app.getActiveNav(nav.id)).toBe(nav);
expect(nav.first()).toBe(view1);
app.goBack();
@@ -236,14 +244,14 @@ describe('App', () => {
});
it('should not go back if app is not enabled', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
spyOn(plt, 'exitApp');
spyOn(nav, 'pop');
spyOn(portal, 'pop');
let view1 = mockView();
const view1 = mockView();
mockViews(nav, [view1]);
app.setEnabled(false, 10000);
@@ -263,101 +271,208 @@ describe('App', () => {
expect(plt.exitApp).not.toHaveBeenCalled();
});
it('should first pop the from the nav controller with the most recent view, then pop subsequent views, and eventually exit the app when there isnt anything left to pop', () => {
const nav = mockNavController();
app.registerRootNav(nav);
const navTwo = mockNavController();
app.registerRootNav(navTwo);
spyOn(plt, 'exitApp');
spyOn(nav, 'pop').and.returnValue(Promise.resolve());
spyOn(navTwo, 'pop').and.returnValue(Promise.resolve());
spyOn(portal, 'pop');
const view1 = mockView();
const view2 = mockView();
mockViews(nav, [view1, view2]);
const view3 = mockView();
view3._ts = view3._ts + 1000;
const view4 = mockView();
view4._ts = view4._ts + 1000;
mockViews(navTwo, [view3, view4]);
app.goBack();
mockViews(navTwo, [view3]);
expect(portal.pop).not.toHaveBeenCalled();
expect(nav.pop).not.toHaveBeenCalled();
expect(navTwo.pop).toHaveBeenCalled();
expect(plt.exitApp).not.toHaveBeenCalled();
app.goBack();
expect(nav.pop).toHaveBeenCalled();
mockViews(nav, [view1]);
app.goBack();
expect(plt.exitApp).toHaveBeenCalled();
});
});
describe('getActiveNav', () => {
it('should get active NavController when using tabs with nested nav', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
let tabs = mockTabs();
let tab1 = mockTab(tabs);
let tab2 = mockTab(tabs);
const tabs = mockTabs();
const tab1 = mockTab(tabs);
const tab2 = mockTab(tabs);
nav.registerChildNav(tabs);
tab2.setSelected(true);
let nav2 = mockNavController();
let nav3 = mockNavController();
let nav4 = mockNavController();
const nav2 = mockNavController();
const nav3 = mockNavController();
const nav4 = mockNavController();
tab1.registerChildNav(nav4);
tab2.registerChildNav(nav2);
tab2.registerChildNav(nav3);
expect(app.getActiveNav()).toBe(nav3);
expect(app.getActiveNav(nav.id)).toBe(nav3);
});
it('should get active NavController when using tabs, nested in a root nav', () => {
let nav = mockNavController();
app._setRootNav(nav);
const nav = mockNavController();
app.registerRootNav(nav);
let tabs = mockTabs();
const tabs = mockTabs();
mockTab(tabs);
let tab2 = mockTab(tabs);
let tab3 = mockTab(tabs);
const tab2 = mockTab(tabs);
const tab3 = mockTab(tabs);
nav.registerChildNav(tabs);
tab2.setSelected(true);
expect(app.getActiveNav()).toBe(tab2);
expect(app.getActiveNav(nav.id)).toBe(tab2);
tab2.setSelected(false);
tab3.setSelected(true);
expect(app.getActiveNav()).toBe(tab3);
expect(app.getActiveNav(nav.id)).toBe(tab3);
});
it('should get active tab NavController when using tabs, and tabs is the root', () => {
let tabs = mockTabs();
const tabs = mockTabs();
mockTab(tabs);
let tab2 = mockTab(tabs);
let tab3 = mockTab(tabs);
app._setRootNav(tabs);
const tab2 = mockTab(tabs);
const tab3 = mockTab(tabs);
app.registerRootNav(tabs);
tab2.setSelected(true);
expect(app.getActiveNav()).toBe(tab2);
expect(app.getActiveNav(tabs.id)).toBe(tab2);
tab2.setSelected(false);
tab3.setSelected(true);
expect(app.getActiveNav()).toBe(tab3);
expect(app.getActiveNav(tabs.id)).toBe(tab3);
});
it('should get active NavController when nested 3 deep', () => {
let nav1 = mockNavController();
let nav2 = mockNavController();
let nav3 = mockNavController();
app._setRootNav(nav1);
const nav1 = mockNavController();
const nav2 = mockNavController();
const nav3 = mockNavController();
app.registerRootNav(nav1);
nav1.registerChildNav(nav2);
nav2.registerChildNav(nav3);
expect(app.getActiveNav()).toBe(nav3);
expect(app.getActiveNav(nav1.id)).toBe(nav3);
});
it('should get active NavController when nested 2 deep', () => {
let nav1 = mockNavController();
let nav2 = mockNavController();
app._setRootNav(nav1);
const nav1 = mockNavController();
const nav2 = mockNavController();
app.registerRootNav(nav1);
nav1.registerChildNav(nav2);
expect(app.getActiveNav()).toBe(nav2);
const activeNav = app.getActiveNav(nav1.id);
expect(activeNav).toBe(nav2);
});
it('should get active NavController when only one nav controller', () => {
let nav = mockNavController();
app._setRootNav(nav);
expect(app.getActiveNav()).toBe(nav);
const nav = mockNavController();
app.registerRootNav(nav);
expect(app.getActiveNav(nav.id)).toBe(nav);
});
it('should set/get the root nav controller', () => {
let nav = mockNavController();
app._setRootNav(nav);
expect(app.getRootNav()).toBe(nav);
const nav = mockNavController();
app.registerRootNav(nav);
expect(app.getRootNavById(nav.id)).toBe(nav);
});
it('should not get an active NavController if there is not root set', () => {
expect(app.getActiveNav()).toBeNull();
expect(app.getRootNav()).toBeNull();
const activeNav = app.getActiveNav('');
const rootNav = app.getRootNavById('');
expect(activeNav).toBeFalsy();
expect(rootNav).toBeFalsy();
});
it('should just work when there are multiple active navs', () => {
const rootNavOne = mockNavController();
const rootNavTwo = mockNavController();
app.registerRootNav(rootNavOne);
app.registerRootNav(rootNavTwo);
const childNavOne = mockNavController();
const childNavTwo = mockNavController();
rootNavOne.registerChildNav(childNavOne);
rootNavTwo.registerChildNav(childNavTwo);
const activeNavOne = app.getActiveNav(rootNavOne.id);
const activeNavTwo = app.getActiveNav(rootNavTwo.id);
expect(activeNavOne).toBe(childNavOne);
expect(activeNavTwo).toBe(childNavTwo);
});
it('should get the active nav when no id is provided assuming there is one nav', () => {
const rootNavOne = mockNavController();
app.registerRootNav(rootNavOne);
const childNavOne = mockNavController();
rootNavOne.registerChildNav(childNavOne);
const result = app.getActiveNav();
expect(result).toEqual(childNavOne);
});
});
describe('getRootNavs', () => {
it('should return an array of navs', () => {
const rootNavOne = mockNavController();
app.registerRootNav(rootNavOne);
const rootNavTwo = mockNavController();
app.registerRootNav(rootNavTwo);
const results = app.getRootNavs();
expect(results.length).toEqual(2);
});
});
describe('getRootNav', () => {
it('should return the single root nav', () => {
const rootNavOne = mockNavController();
app.registerRootNav(rootNavOne);
const result = app.getRootNav();
expect(result).toEqual(rootNavOne);
});
it('should return the first nav in the list for backwards compatibility', () => {
const rootNavOne = mockNavController();
app.registerRootNav(rootNavOne);
const rootNavTwo = mockNavController();
app.registerRootNav(rootNavTwo);
const result = app.getRootNav();
expect(result).toEqual(rootNavOne);
});
});
@@ -381,7 +496,7 @@ describe('App', () => {
it('should enable click block when false is passed with duration', () => {
// arrange
let mockClickBlock: any = {
const mockClickBlock: any = {
activate: () => {}
};
@@ -398,7 +513,7 @@ describe('App', () => {
it('should enable click block when false is passed w/o duration', () => {
// arrange
let mockClickBlock: any = {
const mockClickBlock: any = {
activate: () => {}
};
@@ -416,7 +531,7 @@ describe('App', () => {
it('should enable click block when false is passed with a duration of 0 and with a minDuration', () => {
// arrange
let mockClickBlock: any = {
const mockClickBlock: any = {
activate: () => {}
};
@@ -433,7 +548,7 @@ describe('App', () => {
it('should enable click block when false is passed with a null duration and a minDuration', () => {
// arrange
let mockClickBlock: any = {
const mockClickBlock: any = {
activate: () => {}
};
@@ -450,7 +565,7 @@ describe('App', () => {
it('should enable click block when false is passed with a duration and a minDuration', () => {
// arrange
let mockClickBlock: any = {
const mockClickBlock: any = {
activate: () => {}
};
@@ -466,10 +581,10 @@ describe('App', () => {
});
});
var app: App;
var config: Config;
var plt: MockPlatform;
var portal: OverlayPortal;
let app: App;
let config: Config;
let plt: MockPlatform;
let portal: OverlayPortal;
beforeEach(() => {
config = mockConfig();

View File

@@ -20,13 +20,14 @@
</button>
<ion-item>
<ion-label>DateTime</ion-label>
<ion-label floating>DateTime</ion-label>
<ion-datetime [(ngModel)]="datetime" min="1994-03-14" max="2017-12-09" displayFormat="MM/DD/YYYY" required [disabled]='disabled'></ion-datetime>
</ion-item>
<ion-item>
<ion-label>Select</ion-label>
<ion-label floating>Select</ion-label>
<ion-select [(ngModel)]="select" [disabled]='strDisabled()'>
<ion-option value="">No Game Console</ion-option>
<ion-option value="nes">NES</ion-option>
<ion-option value="n64">Nintendo64</ion-option>
<ion-option value="ps">PlayStation</ion-option>
@@ -42,7 +43,7 @@
</ion-item>
<ion-item>
<ion-label>Input (text)</ion-label>
<ion-label floating>Input (text)</ion-label>
<ion-input [(ngModel)]="text" [disabled]='disabled'></ion-input>
</ion-item>

View File

@@ -25,7 +25,7 @@ import { RootNode } from '../split-pane/split-pane';
* will be displayed differently based on the mode, however the display type can be changed
* to any of the available [menu types](#menu-types). The menu element should be a sibling
* to the app's content element. There can be any number of menus attached to the content.
* These can be controlled from the templates, or programmatically using the [MenuController](../app/MenuController).
* These can be controlled from the templates, or programmatically using the [MenuController](../../app/MenuController).
*
* @usage
*

View File

@@ -92,10 +92,10 @@ export class Nav extends NavControllerBase implements AfterViewInit, RootNode, I
this.parent = viewCtrl.getNav();
this.parent.registerChildNav(this);
} else if (app && !app.getRootNav()) {
} else if (app && !app.getRootNavById(this.id)) {
// a root nav has not been registered yet with the app
// this is the root navcontroller for the entire app
app._setRootNav(this);
app.registerRootNav(this);
}
}
@@ -110,25 +110,22 @@ export class Nav extends NavControllerBase implements AfterViewInit, RootNode, I
ngAfterViewInit() {
this._hasInit = true;
let navSegment = this._linker.initNav(this);
if (navSegment && (navSegment.component || navSegment.loadChildren)) {
// there is a segment match in the linker
return this._linker.initViews(navSegment).then(views => {
const segment = this._linker.getSegmentByNavId(this.id);
if (segment && (segment.component || segment.loadChildren)) {
return this._linker.initViews(segment).then(views => {
this.setPages(views, null, null);
});
} else if (this._root) {
// no segment match, so use the root property
// no segment match, so use the root property but don't set the url I guess
const setUrl = segment ? false : true;
return this.push(this._root, this.rootParams, {
isNavRoot: (<any>this._app.getRootNav() === this)
isNavRoot: (<any>this._app.getRootNavById(this.id) === this),
updateUrl: setUrl
}, null);
}
}
goToRoot(opts: NavOptions) {
return this.setRoot(this._root, this.rootParams, opts, null);
}
/**
* @input {Page} The Page component to load as the root page within this nav.
*/
@@ -167,4 +164,21 @@ export class Nav extends NavControllerBase implements AfterViewInit, RootNode, I
}
}
goToRoot(opts: NavOptions) {
return this.setRoot(this._root, this.rootParams, opts, null);
}
/*
* @private
*/
getType() {
return 'nav';
}
/*
* @private
*/
getSecondaryIdentifier(): string {
return null;
}
}

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
@Component({
template: `
<ion-split-pane>
<ion-nav [root]="rootOne"></ion-nav>
<ion-nav [root]="rootTwo" main #content></ion-nav>
</ion-split-pane>
`
})
export class AppComponent {
rootOne = 'NestedNavOnePageTwo';
rootTwo = 'NestedNavTwoPageTwo';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { NestedNavOnePageOne } from './nested-nav-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(NestedNavOnePageOne)
],
declarations: [
NestedNavOnePageOne
]
})
export class NestedNavOnePageOneModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-nav [root]="root"></ion-nav>
`
})
export class NestedNavOnePageOne {
root: string = 'NestedNavOnePageTwo';
constructor(public nav: NavController) {
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { NestedNavOnePageTwo } from './nested-nav-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(NestedNavOnePageTwo)
],
declarations: [
NestedNavOnePageTwo
]
})
export class NestedNavOnePageTwoModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-nav [root]="root"></ion-nav>
`
})
export class NestedNavOnePageTwo {
root: string = 'NonTabOne';
constructor(public nav: NavController) {
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { NestedNavTwoPageOne } from './nested-nav-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(NestedNavTwoPageOne)
],
declarations: [
NestedNavTwoPageOne
]
})
export class NestedNavTwoPageOneModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-nav [root]="root"></ion-nav>
`
})
export class NestedNavTwoPageOne {
root: string = 'NestedNavTwoPageTwo';
constructor(public nav: NavController) {
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { NestedNavTwoPageTwo } from './nested-nav-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(NestedNavTwoPageTwo)
],
declarations: [
NestedNavTwoPageTwo
]
})
export class NestedNavTwoPageTwoModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-nav [root]="root"></ion-nav>
`
})
export class NestedNavTwoPageTwo {
root: string = 'NonTabTwo';
constructor(public nav: NavController) {
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { NonTabOne } from './non-tab-one';
@NgModule({
imports: [
IonicPageModule.forChild(NonTabOne)
],
declarations: [
NonTabOne
]
})
export class NonTabOneModule { }

View File

@@ -0,0 +1,26 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Nav One</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Nav 1 Page 1
<button ion-button (click)="goToTabs()">Go to Tabs 1</button>
</ion-content>
`
})
export class NonTabOne {
constructor(public nav: NavController) {
}
goToTabs() {
this.nav.push('TabsOnePage');
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { NonTabTwo } from './non-tab-two';
@NgModule({
imports: [
IonicPageModule.forChild(NonTabTwo)
],
declarations: [
NonTabTwo
]
})
export class NonTabTwoModule { }

View File

@@ -0,0 +1,25 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Nav Two</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Nav 2 Page 1
<button ion-button (click)="goToTabs()">Go to Tabs 2</button>
</ion-content>
`
})
export class NonTabTwo {
constructor(public nav: NavController) {
}
goToTabs() {
this.nav.push('TabsTwoPage');
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageOne } from './tab-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageOne)
],
declarations: [
TabsOneTabOnePageOne
]
})
export class TabsOneTabOnePageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsOneTabOnePageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsOneTabOnePageTwo', { userId: '123', name: 'Andy Bernard'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageThree } from './tab-one-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageThree)
],
declarations: [
TabsOneTabOnePageThree
]
})
export class TabsOneTabOnePageThreeModule { }

View File

@@ -0,0 +1,33 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Name: {{paramTwo}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabOnePageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageTwo } from './tab-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageTwo)
],
declarations: [
TabsOneTabOnePageTwo
]
})
export class TabsOneTabOnePageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabOnePageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsOneTabOnePageThree', { paramOne: 'Scranton', paramTwo: 'PA'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageOne } from './tab-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageOne)
],
declarations: [
TabsOneTabTwoPageOne
]
})
export class TabsOneTabTwoPageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsOneTabTwoPageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsOneTabTwoPageTwo', { userId: '456', name: 'Stanley Hudson'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageThree } from './tab-two-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageThree)
],
declarations: [
TabsOneTabTwoPageThree
]
})
export class TabsOneTabTwoPageThreeModule { }

View File

@@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 3
<div>
Param One: {{userId}}
</div>
<div>
Param Two: {{name}}
</div>
</ion-content>
`
})
export class TabsOneTabTwoPageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageTwo } from './tab-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageTwo)
],
declarations: [
TabsOneTabTwoPageTwo
]
})
export class TabsOneTabTwoPageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabTwoPageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsOneTabTwoPageThree', { paramOne: 'Nashua', paramTwo: 'NH'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOnePage } from './tabs-one-page';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOnePage)
],
declarations: [
TabsOnePage
]
})
export class TabsOnePageModule { }

View File

@@ -0,0 +1,21 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOnePage'
})
@Component({
template: `
<ion-tabs>
<ion-tab tabIcon="heart" [root]="tabs1Tab1" tabTitle="Heart"></ion-tab>
<ion-tab tabIcon="star" [root]="tabs1Tab2" tabTitle="Star"></ion-tab>
</ion-tabs>
`
})
export class TabsOnePage {
tabs1Tab1: string = 'TabsOneTabOnePageOne';
tabs1Tab2: string = 'TabsOneTabTwoPageOne';
constructor(public nav: NavController) {
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageOne } from './tab-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageOne)
],
declarations: [
TabsTwoTabOnePageOne
]
})
export class TabsTwoTabOnePageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsTwoTabOnePageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsTwoTabOnePageTwo', { userId: '234', name: 'Phillis Vance - Vance Refridgeration'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageThree } from './tab-one-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageThree)
],
declarations: [
TabsTwoTabOnePageThree
]
})
export class TabsTwoTabOnePageThreeModule { }

View File

@@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsTwoTabOnePageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageTwo } from './tab-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageTwo)
],
declarations: [
TabsTwoTabOnePageTwo
]
})
export class TabsTwoTabOnePageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsTwoTabOnePageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsTwoTabOnePageThree', { paramOne: 'Stamford', paramTwo: 'CT'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageOne } from './tab-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageOne)
],
declarations: [
TabsTwoTabTwoPageOne
]
})
export class TabsTwoTabTwoPageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsTwoTabTwoPageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsTwoTabTwoPageTwo', { userId: '456', name: 'Michael Scarn'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageThree } from './tab-two-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageThree)
],
declarations: [
TabsTwoTabTwoPageThree
]
})
export class TabsTwoTabTwoPageThreeModule { }

View File

@@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsTwoTabTwoPageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageTwo } from './tab-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageTwo)
],
declarations: [
TabsTwoTabTwoPageTwo
]
})
export class TabsTwoTabTwoPageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="next()">Next</button>
</ion-content>
`
})
export class TabsTwoTabTwoPageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
next() {
this.nav.push('TabsTwoTabTwoPageThree', { paramOne: 'Albany', paramTwo: 'NY'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoPage } from './tabs-two-page';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoPage)
],
declarations: [
TabsTwoPage
]
})
export class TabsTwoPageModule { }

View File

@@ -0,0 +1,21 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoPage'
})
@Component({
template: `
<ion-tabs>
<ion-tab tabIcon="aperture" [root]="tabs2Tab1" tabTitle="Aperture"></ion-tab>
<ion-tab tabIcon="apps" [root]="tabs2Tab2" tabTitle="Apps"></ion-tab>
</ion-tabs>
`
})
export class TabsTwoPage {
tabs2Tab1: string = 'TabsTwoTabOnePageOne';
tabs2Tab2: string = 'TabsTwoTabTwoPageOne';
constructor(public nav: NavController) {
}
}

View File

@@ -0,0 +1,14 @@
import { Component } from '@angular/core';
@Component({
template: `
<ion-split-pane>
<ion-nav [root]="root"></ion-nav>
<ion-nav [root]="root2" main #content></ion-nav>
</ion-split-pane>
`
})
export class AppComponent {
root = 'FirstPage';
root2 = 'FourthPage';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,5 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@@ -0,0 +1,9 @@
<ion-header>
<ion-navbar>
<ion-title>Page One</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<h2>Page One</h2>
<button ion-button (click)="goToPageTwo()">Go to Page Two</button>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { FirstPage } from './first-page';
@NgModule({
imports: [
IonicPageModule.forChild(FirstPage)
],
declarations: [
FirstPage
]
})
export class FirstPageModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage()
@Component({
templateUrl: 'first-page.html'
})
export class FirstPage {
constructor(public nav: NavController) {
}
goToPageTwo() {
this.nav.push('SecondPage', { userId: '123', name: 'Michael Scott'});
}
}

View File

@@ -0,0 +1,15 @@
<ion-header>
<ion-navbar>
<ion-title>Page Two</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<h2>Page Two</h2>
<div>
User ID: {{userId}}
</div>
<div>
Name {{name}}
</div>
<button ion-button (click)="goToNextPage()">Go to Next</button>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { SecondPage } from './second-page';
@NgModule({
imports: [
IonicPageModule.forChild(SecondPage)
],
declarations: [
SecondPage
]
})
export class SecondPageModule { }

View File

@@ -0,0 +1,22 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'pageTwo/user/:userId/name/:name'
})
@Component({
templateUrl: 'second-page.html'
})
export class SecondPage {
userId: string;
name: string;
constructor(public nav: NavController, public params: NavParams) {
this.userId = this.params.data.userId;
this.name = this.params.data.name;
}
goToNextPage() {
this.nav.push('ThirdPage', { paramOne: 'mono', paramTwo: 'stereo'});
}
}

View File

@@ -0,0 +1,14 @@
<ion-header>
<ion-navbar>
<ion-title>Page Three</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Page Three
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { ThirdPage } from './third-page';
@NgModule({
imports: [
IonicPageModule.forChild(ThirdPage)
],
declarations: [
ThirdPage
]
})
export class ThirdPageModule { }

View File

@@ -0,0 +1,17 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams} from '../../../../../../..';
@IonicPage({
segment: 'thirdPage/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
templateUrl: 'third-page.html'
})
export class ThirdPage {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, public params: NavParams) {
this.paramOne = params.data.paramOne;
this.paramTwo = params.data.paramTwo;
}
}

View File

@@ -0,0 +1,15 @@
<ion-header>
<ion-navbar>
<ion-title>Page Five</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<h2>Page Five</h2>
<div>
User ID: {{userId}}
</div>
<div>
Name {{name}}
</div>
<button ion-button (click)="goToNextPage()">Go to Next</button>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { FifthPage } from './fifth-page';
@NgModule({
imports: [
IonicPageModule.forChild(FifthPage)
],
declarations: [
FifthPage
]
})
export class FifthPageModule { }

View File

@@ -0,0 +1,22 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'pageFive/user/:userId/name/:name'
})
@Component({
templateUrl: 'fifth-page.html'
})
export class FifthPage {
userId: string;
name: string;
constructor(public nav: NavController, public params: NavParams) {
this.userId = this.params.data.userId;
this.name = this.params.data.name;
}
goToNextPage() {
this.nav.push('SixthPage', { paramOne: 'Tobey', paramTwo: 'Holly'});
}
}

View File

@@ -0,0 +1,9 @@
<ion-header>
<ion-navbar>
<ion-title>Page Four</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<h2>Page Four</h2>
<button ion-button (click)="goToPageTwo()">Next</button>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { FourthPage } from './fourth-page';
@NgModule({
imports: [
IonicPageModule.forChild(FourthPage)
],
declarations: [
FourthPage
]
})
export class FourthPageModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage()
@Component({
templateUrl: 'fourth-page.html'
})
export class FourthPage {
constructor(public nav: NavController) {
}
goToPageTwo() {
this.nav.push('FifthPage', { userId: '567', name: 'Pamela Beasley'});
}
}

View File

@@ -0,0 +1,14 @@
<ion-header>
<ion-navbar>
<ion-title>Page Six</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Page Six
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { SixthPage } from './sixth-page';
@NgModule({
imports: [
IonicPageModule.forChild(SixthPage)
],
declarations: [
SixthPage
]
})
export class SixthPageModule { }

View File

@@ -0,0 +1,18 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams} from '../../../../../../..';
@IonicPage({
segment: 'sixthPage/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
templateUrl: 'sixth-page.html'
})
export class SixthPage {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, public params: NavParams) {
this.paramOne = params.data.paramOne;
this.paramTwo = params.data.paramTwo;
}
}

View File

@@ -0,0 +1,22 @@
import { Component } from '@angular/core';
@Component({
template: `
<ion-split-pane>
<ion-tabs>
<ion-tab tabIcon="heart" [root]="tabs1Tab1" tabTitle="Heart"></ion-tab>
<ion-tab tabIcon="star" [root]="tabs1Tab2" tabTitle="Star"></ion-tab>
</ion-tabs>
<ion-tabs>
<ion-tab tabIcon="aperture" [root]="tabs2Tab1" tabTitle="Aperture"></ion-tab>
<ion-tab tabIcon="apps" [root]="tabs2Tab2" tabTitle="Apps"></ion-tab>
</ion-tabs>
</ion-split-pane>
`
})
export class AppComponent {
tabs1Tab1 = 'TabsOneTabOnePageOne';
tabs1Tab2 = 'TabsOneTabTwoPageOne';
tabs2Tab1 = 'TabsTwoTabOnePageOne';
tabs2Tab2 = 'TabsTwoTabTwoPageOne';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,5 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageOne } from './tab-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageOne)
],
declarations: [
TabsOneTabOnePageOne
]
})
export class TabsOneTabOnePageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsOneTabOnePageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsOneTabOnePageTwo', { userId: '123', name: 'Andy Bernard'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageThree } from './tab-one-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageThree)
],
declarations: [
TabsOneTabOnePageThree
]
})
export class TabsOneTabOnePageThreeModule { }

View File

@@ -0,0 +1,33 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Name: {{paramTwo}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabOnePageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageTwo } from './tab-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageTwo)
],
declarations: [
TabsOneTabOnePageTwo
]
})
export class TabsOneTabOnePageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabOnePageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsOneTabOnePageThree', { paramOne: 'Scranton', paramTwo: 'PA'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageOne } from './tab-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageOne)
],
declarations: [
TabsOneTabTwoPageOne
]
})
export class TabsOneTabTwoPageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsOneTabTwoPageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsOneTabTwoPageTwo', { userId: '456', name: 'Stanley Hudson'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageThree } from './tab-two-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageThree)
],
declarations: [
TabsOneTabTwoPageThree
]
})
export class TabsOneTabTwoPageThreeModule { }

View File

@@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 3
<div>
Param One: {{userId}}
</div>
<div>
Param Two: {{name}}
</div>
</ion-content>
`
})
export class TabsOneTabTwoPageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageTwo } from './tab-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageTwo)
],
declarations: [
TabsOneTabTwoPageTwo
]
})
export class TabsOneTabTwoPageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabTwoPageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsOneTabTwoPageThree', { paramOne: 'Nashua', paramTwo: 'NH'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageOne } from './tab-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageOne)
],
declarations: [
TabsTwoTabOnePageOne
]
})
export class TabsTwoTabOnePageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsTwoTabOnePageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsTwoTabOnePageTwo', { userId: '234', name: 'Phillis Vance - Vance Refridgeration'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageThree } from './tab-one-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageThree)
],
declarations: [
TabsTwoTabOnePageThree
]
})
export class TabsTwoTabOnePageThreeModule { }

View File

@@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsTwoTabOnePageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageTwo } from './tab-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageTwo)
],
declarations: [
TabsTwoTabOnePageTwo
]
})
export class TabsTwoTabOnePageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsTwoTabOnePageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsTwoTabOnePageThree', { paramOne: 'Stamford', paramTwo: 'CT'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageOne } from './tab-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageOne)
],
declarations: [
TabsTwoTabTwoPageOne
]
})
export class TabsTwoTabTwoPageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsTwoTabTwoPageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsTwoTabTwoPageTwo', { userId: '456', name: 'Michael Scarn'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageThree } from './tab-two-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageThree)
],
declarations: [
TabsTwoTabTwoPageThree
]
})
export class TabsTwoTabTwoPageThreeModule { }

View File

@@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageThree/paramOne/:paramOne/paramTwo/:paramTwo'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsTwoTabTwoPageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageTwo } from './tab-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageTwo)
],
declarations: [
TabsTwoTabTwoPageTwo
]
})
export class TabsTwoTabTwoPageTwoModule { }

View File

@@ -0,0 +1,37 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageTwo/userId/:userId/name/:name'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="next()">Next</button>
</ion-content>
`
})
export class TabsTwoTabTwoPageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
next() {
this.nav.push('TabsTwoTabTwoPageThree', { paramOne: 'Albany', paramTwo: 'NY'});
}
}

Some files were not shown because too many files have changed in this diff Show More