diff --git a/js/angular/directive/tabs.js b/js/angular/directive/tabs.js
index 3622161f57..04e19b7320 100644
--- a/js/angular/directive/tabs.js
+++ b/js/angular/directive/tabs.js
@@ -82,6 +82,18 @@ function($ionicTabsDelegate, $ionicConfig, $ionicHistory) {
$scope.$hasTabsTop = isTabsTop && !isHidden;
});
+ function emitLifecycleEvent(ev, data) {
+ ev.stopPropagation();
+ var selectedTab = tabsCtrl.selectedTab();
+ if (selectedTab) {
+ selectedTab.$emit(ev.name.replace('NavView', 'View'), data);
+ }
+ }
+
+ $scope.$on('$ionicNavView.beforeLeave', emitLifecycleEvent);
+ $scope.$on('$ionicNavView.afterLeave', emitLifecycleEvent);
+ $scope.$on('$ionicNavView.leave', emitLifecycleEvent);
+
$scope.$on('$destroy', function() {
// variable to inform child tabs that they're all being blown away
// used so that while destorying an individual tab, each one
diff --git a/js/angular/service/viewSwitcher.js b/js/angular/service/viewSwitcher.js
index 6ee378a768..0629459e7c 100644
--- a/js/angular/service/viewSwitcher.js
+++ b/js/angular/service/viewSwitcher.js
@@ -315,6 +315,12 @@ function($timeout, $document, $q, $ionicClickBlock, $ionicConfig, $ionicNavBarDe
scope.$emit('$ionicView.leave', leavingData);
}
}
+
+ } else if (scope && leavingData && leavingData.viewId) {
+ scope.$emit('$ionicNavView.' + step + 'Leave', leavingData);
+ if (step == 'after') {
+ scope.$emit('$ionicNavView.leave', leavingData);
+ }
}
},
diff --git a/test/unit/angular/directive/navView.unit.js b/test/unit/angular/directive/navView.unit.js
index d734f548eb..fdf21ae429 100644
--- a/test/unit/angular/directive/navView.unit.js
+++ b/test/unit/angular/directive/navView.unit.js
@@ -920,6 +920,96 @@ describe('Ionic nav-view', function() {
expect(leave.transitionId).toEqual(4);
}));
+ it('should emit tab leaving events', inject(function ($state, $q, $timeout, $compile, $ionicConfig) {
+ var beforeLeave, afterLeave, leave;
+ scope.$on('$ionicView.beforeLeave', function(ev, d){
+ beforeLeave = d;
+ });
+ scope.$on('$ionicView.afterLeave', function(ev, d){
+ afterLeave = d;
+ });
+ scope.$on('$ionicView.leave', function(ev, d){
+ leave = d;
+ });
+
+ elem.append($compile('