diff --git a/js/angular/controller/sideMenuController.js b/js/angular/controller/sideMenuController.js index a9ba7f4c54..e2d6d5e191 100644 --- a/js/angular/controller/sideMenuController.js +++ b/js/angular/controller/sideMenuController.js @@ -50,5 +50,8 @@ function($scope, $attrs, $ionicSideMenuDelegate, $ionicPlatform) { var deregisterInstance = $ionicSideMenuDelegate._registerInstance( this, $attrs.delegateHandle ); - $scope.$on('$destroy', deregisterInstance); + $scope.$on('$destroy', function() { + deregisterInstance(); + deregisterBackButtonAction(); + }); }]); diff --git a/test/unit/angular/controller/sideMenuController.unit.js b/test/unit/angular/controller/sideMenuController.unit.js index d8ac4d31b2..faabaf71cd 100644 --- a/test/unit/angular/controller/sideMenuController.unit.js +++ b/test/unit/angular/controller/sideMenuController.unit.js @@ -34,4 +34,20 @@ describe('$ionicSideMenus controller', function() { ctrl.$scope.$apply(); expect(deregSpy).toHaveBeenCalled(); })); + + it('should deregister back button action on $destroy', inject(function($ionicPlatform) { + var openAmount = 0; + var deregSpy = jasmine.createSpy('deregister'); + spyOn($ionicPlatform, 'registerBackButtonAction').andReturn(deregSpy); + + var ctrl = setup(); + spyOn(ctrl, 'getOpenAmount').andCallFake(function() { return openAmount; }); + + expect($ionicPlatform.registerBackButtonAction).not.toHaveBeenCalled(); + openAmount = 1; + ctrl.$scope.$apply(); + expect(deregSpy).not.toHaveBeenCalled(); + ctrl.$scope.$destroy(); + expect(deregSpy).toHaveBeenCalled(); + })); });