Solução de carregador de página para AngularJS

Oi pessoal! Eu encontrei uma solução simples e perfeita para a realização do carregador de páginas para projetos AngularJS.


angular
('myModule').factory('loaderToggle', ['$rootScope', '$timeout', function($rootScope, $timeout) {
return {
'request': function(config) {
// I suppose that $rootScope.loader variable used in ng-show directive
if (config.withloader) $rootScope.loader = true;
return config;
},

'response': function(response) {
if (response.config.withloader) {
// timeout for avoid loader blinking
$timeout
(function () {
$rootScope
.loader = false;
}, 500);
}
return response;
}
}
}]);

// then inject our factory into angular config

angular
.module('myModule').config(['$httpProvider', function($httpProvider) {
// our config lines...
// then add loaderToggle factory to interceptors array
$httpProvider
.interceptors.push('loaderToggle');
}]);

Em seguida, basta adicionar withloader prop a $ resource config:


angular
.module('myModule')
.factory('Posts', function($resource, BACKEND_URI, PERPAGE_LOAD_LIMIT, $rootScope) {
var $res = $resource(
BACKEND_URI
+ "/post:action?json&token=" + $rootScope.token,
{action: '@action'},
{
list
: {method: 'GET', params: {action: '/', offset: 0, perpage: PERPAGE_LOAD_LIMIT}, withloader: true},
add
: {method: 'POST', params: {action: '/new'}, withloader: true},
edit
: {method: 'POST', params: {action: '/change_status'}, withloader: true}
}
);
return $res;

});

E isso é tudo! Funciona para AngularJS 1.2.20.