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' }); } }