diff --git a/js/angular/service/history.js b/js/angular/service/history.js index 6636865053..025904067b 100644 --- a/js/angular/service/history.js +++ b/js/angular/service/history.js @@ -645,23 +645,18 @@ function($rootScope, $state, $location, $window, $ionicViewSwitcher, $ionicNavVi if (!scope) return false; var climbScope = scope; - var historyId; + var currentHistoryId = this.currentHistoryId(); while (climbScope) { if (climbScope.$$disconnected) { return false; } - if (!historyId && climbScope.hasOwnProperty('$historyId')) { - historyId = climbScope.$historyId; + if (currentHistoryId && currentHistoryId == climbScope.$historyId) { + return true; } climbScope = climbScope.$parent; } - var currentHistoryId = this.currentHistoryId(); - if (currentHistoryId) { - return currentHistoryId == (historyId || 'root'); - } - - return true; + return currentHistoryId ? currentHistoryId == 'root' : true; } }; diff --git a/test/unit/angular/service/history.unit.js b/test/unit/angular/service/history.unit.js index 9fe08c4db6..bd493af3a2 100644 --- a/test/unit/angular/service/history.unit.js +++ b/test/unit/angular/service/history.unit.js @@ -1161,6 +1161,25 @@ describe('Ionic History', function() { expect(ionicHistory.isActiveScope(scope)).toEqual(true); }); + it('should be active when one of the parent scopes is the same history id as current view', function() { + ionicHistory.currentView({ + historyId: '123' + }); + + var scope = { + $parent: { + $historyId: 'abc', + $parent: { + $historyId: 'xyz', + $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'