From 3d1285359330be1214d5e9a3f4bac6b2b35a3cc3 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 26 Feb 2015 14:02:39 -0700 Subject: [PATCH] fix(loading): options.hideOnStateChange: also hide on stateChangeError Closes #3051. --- js/angular/service/loading.js | 12 ++++++++---- test/unit/angular/service/loading.unit.js | 14 +++++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/js/angular/service/loading.js b/js/angular/service/loading.js index 6283d4dd94..8ce29a29e8 100644 --- a/js/angular/service/loading.js +++ b/js/angular/service/loading.js @@ -72,7 +72,8 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop, var loaderInstance; //default values var deregisterBackAction = noop; - var deregisterStateListener = noop; + var deregisterStateListener1 = noop; + var deregisterStateListener2 = noop; var loadingShowDelay = $q.when(); return { @@ -193,9 +194,11 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop, options = extend({}, $ionicLoadingConfig || {}, options || {}); var delay = options.delay || options.showDelay || 0; - deregisterStateListener(); + deregisterStateListener1(); + deregisterStateListener2(); if (options.hideOnStateChange) { - deregisterStateListener = $rootScope.$on('$stateChangeSuccess', hideLoader); + deregisterStateListener1 = $rootScope.$on('$stateChangeSuccess', hideLoader); + deregisterStateListener2 = $rootScope.$on('$stateChangeError', hideLoader); } //If loading.show() was called previously, cancel it and show with our new options @@ -219,7 +222,8 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop, } function hideLoader() { - deregisterStateListener(); + deregisterStateListener1(); + deregisterStateListener2(); $timeout.cancel(loadingShowDelay); getLoader().then(function(loader) { loader.hide(); diff --git a/test/unit/angular/service/loading.unit.js b/test/unit/angular/service/loading.unit.js index 7c7b4e881d..840b68c22c 100644 --- a/test/unit/angular/service/loading.unit.js +++ b/test/unit/angular/service/loading.unit.js @@ -194,7 +194,7 @@ describe('$ionicLoading service', function() { })); }); - it('should use options.hideOnStateChange', inject(function($ionicLoading, $rootScope, $timeout) { + it('should use options.hideOnStateChange to hide on $stateChangeSuccess', inject(function($ionicLoading, $rootScope, $timeout) { var loader = TestUtil.unwrapPromise($ionicLoading._getLoader()); $ionicLoading.show({ hideOnStateChange: true, @@ -206,6 +206,18 @@ describe('$ionicLoading service', function() { expect(loader.hide).toHaveBeenCalled(); })); + it('should use options.hideOnStateChange to hide on $stateChangeError', inject(function($ionicLoading, $rootScope, $timeout) { + var loader = TestUtil.unwrapPromise($ionicLoading._getLoader()); + $ionicLoading.show({ + hideOnStateChange: true, + template: '' + }); + spyOn(loader, 'hide'); + $rootScope.$broadcast('$stateChangeError'); + $rootScope.$apply(); + expect(loader.hide).toHaveBeenCalled(); + })); + it('should default false options.hideOnStateChange', inject(function($ionicLoading, $rootScope, $timeout) { var loader = TestUtil.unwrapPromise($ionicLoading._getLoader()); $ionicLoading.show({