From 5793716b67d5c9f72d0b397b95791573e6327a69 Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Thu, 10 Dec 2015 07:35:25 -0600 Subject: [PATCH] feat(rootNav): create rootNav property on NavController/Tabs #714 --- ionic/components/nav/nav-controller.ts | 23 +++++++++++++++----- ionic/components/tabs/tabs.ts | 13 +++++++++++ ionic/components/tabs/test/advanced/index.ts | 4 +--- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/ionic/components/nav/nav-controller.ts b/ionic/components/nav/nav-controller.ts index b6c2e2580c..c68e9d1930 100644 --- a/ionic/components/nav/nav-controller.ts +++ b/ionic/components/nav/nav-controller.ts @@ -441,7 +441,7 @@ export class NavController extends Ion { viewCtrl.shouldDestroy = false; viewCtrl.shouldCache = false; - this._incrementId(viewCtrl); + this._incId(viewCtrl); this._views.splice(index, 0, viewCtrl); this._cleanup(); @@ -1271,14 +1271,14 @@ export class NavController extends Ion { * @private */ _add(viewCtrl) { - this._incrementId(viewCtrl); + this._incId(viewCtrl); this._views.push(viewCtrl); } /** * @private */ - _incrementId(viewCtrl) { + _incId(viewCtrl) { viewCtrl.id = this.id + '-' + (++this._ids); } @@ -1435,12 +1435,23 @@ export class NavController extends Ion { /** * @private - * IS RETURNING UNDEFIND * @param {TODO} view TODO - * @returns {TODO} TODO + * @returns {boolean} */ isActive(viewCtrl) { - return (viewCtrl && viewCtrl.state === ACTIVE_STATE); + return !!(viewCtrl && viewCtrl.state === ACTIVE_STATE); + } + + /** + * Returns the root NavController. + * @returns {NavController} + */ + get rootNav() { + let nav = this; + while (nav.parent) { + nav = nav.parent; + } + return nav; } /** diff --git a/ionic/components/tabs/tabs.ts b/ionic/components/tabs/tabs.ts index 0e9c91070c..fa160401ff 100644 --- a/ionic/components/tabs/tabs.ts +++ b/ionic/components/tabs/tabs.ts @@ -246,6 +246,19 @@ export class Tabs extends Ion { return Promise.resolve(); } + /** + * Returns the root NavController. Returns `null` if Tabs is not + * within a NavController. + * @returns {NavController} + */ + get rootNav() { + let nav = this.parent; + while (nav.parent) { + nav = nav.parent; + } + return nav; + } + } let tabIds = -1; diff --git a/ionic/components/tabs/test/advanced/index.ts b/ionic/components/tabs/test/advanced/index.ts index 13d34924c1..6c08ca3b56 100644 --- a/ionic/components/tabs/test/advanced/index.ts +++ b/ionic/components/tabs/test/advanced/index.ts @@ -73,9 +73,7 @@ class Tab1Page1 { } logout() { - let tabs = this.nav.parent; - let rootNav = tabs.parent; - rootNav.setRoot(SignIn, null, { animate: true, direction: 'back' }); + this.nav.rootNav.setRoot(SignIn, null, { animate: true, direction: 'back' }); } }