From 343048cbfd37c6b084c631d9e050c5f73070c70e Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Sun, 29 Nov 2015 00:22:50 -0600 Subject: [PATCH] fix(router): prevent double navs --- ionic/components/nav/nav-controller.ts | 12 +++++------- ionic/components/nav/nav-router.ts | 2 +- ionic/components/tabs/tab.ts | 5 ++--- ionic/components/tabs/test/advanced/index.ts | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/ionic/components/nav/nav-controller.ts b/ionic/components/nav/nav-controller.ts index 52b99ebac9..1adb92eee0 100644 --- a/ionic/components/nav/nav-controller.ts +++ b/ionic/components/nav/nav-controller.ts @@ -229,8 +229,7 @@ export class NavController extends Ion { } if (this.isTransitioning()) { - console.debug('nav controller actively transitioning'); - return Promise.reject(); + return Promise.reject('nav controller actively transitioning'); } this.setTransitioning(true, 500); @@ -301,12 +300,11 @@ export class NavController extends Ion { */ pop(opts = {}) { if (!opts.animateFirst && !this.canGoBack()) { - return Promise.reject(); + return Promise.reject('pop cannot go back'); } if (this.isTransitioning()) { - console.debug('nav controller actively transitioning'); - return Promise.reject(); + return Promise.reject('nav controller actively transitioning'; } this.setTransitioning(true, 500); @@ -422,7 +420,7 @@ export class NavController extends Ion { */ insert(index, componentType, params = {}, opts = {}) { if (!componentType || index < 0) { - return Promise.reject(); + return Promise.reject('invalid insert'); } // push it onto the end @@ -464,7 +462,7 @@ export class NavController extends Ion { */ remove(index, opts = {}) { if (index < 0 || index >= this._views.length) { - return Promise.reject("Index out of range"); + return Promise.reject("index out of range"); } let viewToRemove = this._views[index]; diff --git a/ionic/components/nav/nav-router.ts b/ionic/components/nav/nav-router.ts index 3ecb77acfa..fe7d0385bd 100644 --- a/ionic/components/nav/nav-router.ts +++ b/ionic/components/nav/nav-router.ts @@ -51,7 +51,7 @@ export class NavRouter extends RouterOutlet { // prevent double navigations to the same view var lastView = this.nav.last(); - if (lastView && lastView.componentType === componentType && lastView.params.data === nextInstruction.params) { + if (this.nav.isTransitioning() || lastView && lastView.componentType === componentType && lastView.params.data === nextInstruction.params) { return Promise.resolve(); } diff --git a/ionic/components/tabs/tab.ts b/ionic/components/tabs/tab.ts index 430c69bed8..b2c9d6fb13 100644 --- a/ionic/components/tabs/tab.ts +++ b/ionic/components/tabs/tab.ts @@ -102,15 +102,14 @@ export class Tab extends NavController { } else if (this.parent.preloadTabs) { this._loadTimer = setTimeout(() => { if (!this._loaded) { - let opts = { + this.load({ animate: false, preload: true, postLoad: (viewCtrl) => { let navbar = viewCtrl.getNavbar(); navbar && navbar.setHidden(true); } - }; - this.load(opts); + }, function(){}); } }, 1000 * this.index); } diff --git a/ionic/components/tabs/test/advanced/index.ts b/ionic/components/tabs/test/advanced/index.ts index 96e62e236f..8d68725e95 100644 --- a/ionic/components/tabs/test/advanced/index.ts +++ b/ionic/components/tabs/test/advanced/index.ts @@ -33,7 +33,7 @@ class SignIn { push() { setTimeout(() => { - this.nav.setRoot(TabsPage, null, { animate: true }); + this.nav.push(TabsPage); }, 1000); } }