diff --git a/js/angular/service/history.js b/js/angular/service/history.js index 3cebb634b6..6636865053 100644 --- a/js/angular/service/history.js +++ b/js/angular/service/history.js @@ -128,7 +128,7 @@ function($rootScope, $state, $location, $window, $ionicViewSwitcher, $ionicNavVi // nothing found keep climbing up parentScope = parentScope.$parent; } - // no history for for the parent, use the root + // no history for the parent, use the root return { historyId: 'root', scope: $rootScope }; } @@ -642,11 +642,23 @@ function($rootScope, $state, $location, $window, $ionicViewSwitcher, $ionicNavVi }, isActiveScope: function(scope) { - if (!scope || scope.$$disconnected) return false; + if (!scope) return false; + + var climbScope = scope; + var historyId; + while (climbScope) { + if (climbScope.$$disconnected) { + return false; + } + if (!historyId && climbScope.hasOwnProperty('$historyId')) { + historyId = climbScope.$historyId; + } + climbScope = climbScope.$parent; + } var currentHistoryId = this.currentHistoryId(); if (currentHistoryId) { - return currentHistoryId == (isDefined(scope.$historyId) ? scope.$historyId : 'root'); + return currentHistoryId == (historyId || 'root'); } return true; diff --git a/test/unit/angular/service/history.unit.js b/test/unit/angular/service/history.unit.js index d3e62b1e01..9fe08c4db6 100644 --- a/test/unit/angular/service/history.unit.js +++ b/test/unit/angular/service/history.unit.js @@ -1121,6 +1121,17 @@ describe('Ionic History', function() { expect(ionicHistory.isActiveScope(scope)).toEqual(false); }); + it('should not be active when parent scope is disconnected', function() { + var scope = { + $parent: { + $parent: { + $$disconnected: true + } + } + }; + expect(ionicHistory.isActiveScope(scope)).toEqual(false); + }); + it('should be active w/ scope but no current history id', function() { ionicHistory.registerHistory('1234'); expect(ionicHistory.isActiveScope(scope)).toEqual(true); @@ -1137,6 +1148,19 @@ describe('Ionic History', function() { expect(ionicHistory.isActiveScope(scope)).toEqual(true); }); + it('should be active w/ scopes parent the same history id as current view', function() { + ionicHistory.currentView({ + historyId: '123' + }); + + var scope = { + $parent: { + $historyId: '123' + } + } + expect(ionicHistory.isActiveScope(scope)).toEqual(true); + }); + it('should be not active w/ scope different history id as current view', function() { ionicHistory.currentView({ historyId: '123'