Skip to content

Commit 082f30e

Browse files
committed
fix(tabs): correct tab leaving lifecycle events
Closes #2869
1 parent 540124d commit 082f30e

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

Diff for: js/angular/controller/navViewController.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ function($scope, $element, $attrs, $compile, $controller, $ionicNavBarDelegate,
5858
$scope.$on('$ionicTabs.top', onTabsTop);
5959
$scope.$on('$ionicSubheader', onBarSubheader);
6060

61+
$scope.$on('$ionicTabs.beforeLeave', onTabsLeave);
62+
$scope.$on('$ionicTabs.afterLeave', onTabsLeave);
63+
$scope.$on('$ionicTabs.leave', onTabsLeave);
64+
6165
ionic.Platform.ready(function() {
6266
if (ionic.Platform.isWebView() && $ionicConfig.views.swipeBackEnabled()) {
6367
self.initSwipeBack();
@@ -193,6 +197,21 @@ function($scope, $element, $attrs, $compile, $controller, $ionicNavBarDelegate,
193197
};
194198

195199

200+
function onTabsLeave(ev, data) {
201+
var viewElements = $element.children();
202+
var viewElement, viewScope;
203+
204+
for (var x = 0, l = viewElements.length; x < l; x++) {
205+
viewElement = viewElements.eq(x);
206+
if (navViewAttr(viewElement) == VIEW_STATUS_ACTIVE) {
207+
viewScope = viewElement.scope();
208+
viewScope && viewScope.$emit(ev.name.replace('Tabs', 'View'), data);
209+
break;
210+
}
211+
}
212+
}
213+
214+
196215
self.cacheCleanup = function() {
197216
var viewElements = $element.children();
198217
for (var x = 0, l = viewElements.length; x < l; x++) {
@@ -216,7 +235,6 @@ function($scope, $element, $attrs, $compile, $controller, $ionicNavBarDelegate,
216235
viewScope && viewScope.$broadcast('$ionicView.clearCache');
217236
}
218237
}
219-
220238
};
221239

222240

Diff for: js/angular/controller/tabsController.js

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ IonicModule
66
function($scope, $element, $ionicHistory) {
77
var self = this;
88
var selectedTab = null;
9+
var previousSelectedTab = null;
910
var selectedTabIndex;
1011
self.tabs = [];
1112

@@ -15,6 +16,9 @@ function($scope, $element, $ionicHistory) {
1516
self.selectedTab = function() {
1617
return selectedTab;
1718
};
19+
self.previousSelectedTab = function() {
20+
return previousSelectedTab;
21+
};
1822

1923
self.add = function(tab) {
2024
$ionicHistory.registerHistory(tab);
@@ -43,6 +47,7 @@ function($scope, $element, $ionicHistory) {
4347

4448
self.deselect = function(tab) {
4549
if (tab.$tabSelected) {
50+
previousSelectedTab = selectedTab;
4651
selectedTab = selectedTabIndex = null;
4752
tab.$tabSelected = false;
4853
(tab.onDeselect || noop)();

Diff for: js/angular/directive/tabs.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ function($ionicTabsDelegate, $ionicConfig, $ionicHistory) {
8585

8686
function emitLifecycleEvent(ev, data) {
8787
ev.stopPropagation();
88-
var selectedTab = tabsCtrl.selectedTab();
89-
if (selectedTab) {
90-
selectedTab.$emit(ev.name.replace('NavView', 'View'), data);
88+
var previousSelectedTab = tabsCtrl.previousSelectedTab();
89+
if (previousSelectedTab) {
90+
previousSelectedTab.$broadcast(ev.name.replace('NavView', 'Tabs'), data);
9191
}
9292
}
9393

0 commit comments

Comments
 (0)