diff --git a/js/ext/angular/src/service/ionicLoading.js b/js/ext/angular/src/service/ionicLoading.js index a393de6f51..6e4ebae476 100644 --- a/js/ext/angular/src/service/ionicLoading.js +++ b/js/ext/angular/src/service/ionicLoading.js @@ -45,6 +45,8 @@ angular.module('ionic.service.loading', []) function($animate, $document, $ionicTemplateLoader, $ionicBackdrop, $timeout, $q, $log) { var loaderInstance; + //default value + var loadingShowDelay = $q.when(); return { /** @@ -135,7 +137,7 @@ function($animate, $document, $ionicTemplateLoader, $ionicBackdrop, $timeout, $q deprecated.field(SHOW_DELAY_LOADING_DEPRECATED, $log.warn, options, 'showDelay', options.showDelay); deprecated.field(SHOW_BACKDROP_LOADING_DEPRECATED, $log.warn, options, 'showBackdrop', options.showBackdrop); - $timeout(getLoader, options.delay || options.showDelay || 0) + loadingShowDelay = $timeout(getLoader, options.delay || options.showDelay || 0) .then(function(loader) { return loader.show(options); }); @@ -154,7 +156,7 @@ function($animate, $document, $ionicTemplateLoader, $ionicBackdrop, $timeout, $q } function hideLoader() { - getLoader().then(function(loader) { + loadingShowDelay.then(getLoader).then(function(loader) { loader.hide(); }); } diff --git a/js/ext/angular/test/service/ionicLoading.unit.js b/js/ext/angular/test/service/ionicLoading.unit.js index f3de66b807..3d5f450212 100644 --- a/js/ext/angular/test/service/ionicLoading.unit.js +++ b/js/ext/angular/test/service/ionicLoading.unit.js @@ -103,5 +103,21 @@ describe('$ionicLoading service', function() { expect(loader.hide).toHaveBeenCalled(); })); + it('hide should happen after show', inject(function($ionicLoading, $timeout) { + ionic.requestAnimationFrame = function(cb) { cb(); }; + var loader = TestUtil.unwrapPromise($ionicLoading._getLoader()); + spyOn(loader, 'hide').andCallThrough(); + spyOn(loader, 'show').andCallThrough(); + $ionicLoading.show({ delay: 1000 }); + $ionicLoading.hide(); + expect(loader.show).not.toHaveBeenCalled(); + expect(loader.hide).not.toHaveBeenCalled(); + $timeout.flush(); + expect(loader.show).toHaveBeenCalled(); + expect(loader.hide).toHaveBeenCalled(); + expect(loader.isShown).toBe(false); + expect(loader.element.hasClass('ng-hide')).toBe(true); + })); + }); });