diff --git a/packages/core/src/components/nav/nav.tsx b/packages/core/src/components/nav/nav.tsx index 2f1894c89d..f63c7b598c 100644 --- a/packages/core/src/components/nav/nav.tsx +++ b/packages/core/src/components/nav/nav.tsx @@ -1365,13 +1365,13 @@ export function updateTab(nav: Nav, component: any, data: any, escapeHatch: Esca // yeah yeah, I know this is kind of ugly but oh well, I know the internal structure of const tabs = tab.parentElement.parentElement as HTMLIonTabsElement; - return isTabSelected(tabs, tab).then((isSelected: boolean) => { + return isTabSelected(tabs, tab).then((isSelected) => { if (!isSelected) { const promise = updateNav(nav, component, data, escapeHatch, isTopLevel); const app = document.querySelector('ion-app'); return app.componentOnReady().then(() => { app.setExternalNavPromise(promise); - }).then(() => { + // okay, the tab is not selected, so we need to do a "switch" transition // basically, we should update the nav, and then swap the tabs return promise.then((navResult) => { diff --git a/packages/core/src/components/tabs/tabs.tsx b/packages/core/src/components/tabs/tabs.tsx index acd3632c87..de4a3990a0 100644 --- a/packages/core/src/components/tabs/tabs.tsx +++ b/packages/core/src/components/tabs/tabs.tsx @@ -122,18 +122,19 @@ export class Tabs implements NavOutlet { const leavingTab = this.selectedTab; - return selectedTab.setActive() - .then(() => { - selectedTab.selected = true; - if (leavingTab && leavingTab !== selectedTab) { + return selectedTab.setActive().then(() => { + selectedTab.selected = true; + if (leavingTab !== selectedTab) { + if (leavingTab) { leavingTab.active = false; - this.selectedTab = selectedTab; - this.ionChange.emit(selectedTab); - this.ionNavChanged.emit({isPop: false}); - return true; } - return false; - }); + this.selectedTab = selectedTab; + this.ionChange.emit(selectedTab); + this.ionNavChanged.emit({isPop: false}); + return true; + } + return false; + }); } /**