angularjs - How to loading indicator in angular service -


i need make show user ajax request still being executed.

i have angular module:

var mymodule = angular.module('mymodule', [     'ngroute',     'ngcookies',     'localization',     'mycontrollers',     'myservices' ]); 

my service looks like:

var myservices = angular.module('myservices', ['ngresource']); myservices.factory('myinfo', ['$resource',function($resource){     return $resource('/api/:method', {}, {         getsettings: {method:'post', params:{method:'get_my_settings'}},         getinfo: {method:'post',params:{method:'get_my_info'}}     }); }]); 

and controller:

var mycontrollers = angular.module('mycontrollers', []); mycontrollers.controller('somectrl', ['$scope', 'myinfo',    function($scope, myinfo) {       $scope.myinfo = myinfo.getinfo();    } ]); 

everything works fine! how can start doing action before sending request , finish action when request complete , response received?

ajax in jquery has parameters "beforesend" , "complete" can define before send , when request complete.

how in angular?

thanks

angular give access $http module have pendingrequests property.

see example : https://github.com/angular-app/angular-app/blob/master/client/src/common/services/httprequesttracker.js

they're creating service :

angular.module('services.httprequesttracker', [])  .factory('httprequesttracker', ['$http',     function($http) {          var httprequesttracker = {};         httprequesttracker.haspendingrequests = function() {             return $http.pendingrequests.length > 0;         };          return httprequesttracker;     } ]) 

then can create directive showing ajax loader (or else) when service returns pending request :

angular.module('directives.ajaxloader', [     'services.httprequesttracker' ])  .directive('ajaxloader', ['httprequesttracker',     function(httprequesttracker) {         return {             templateurl: 'common/ajaxloader.tpl.html',             restrict: 'ea',             replace: true,             scope: true,             link: function($scope) { // function can have more parameters after $scope, $element, $attrs, $controller                 $scope.haspendingrequests = function() {                     return httprequesttracker.haspendingrequests();                 };             }         };     } ]) 

ajaxloader.tpl.html :

<div class="fade" ng-class="{in: haspendingrequests(), out: !haspendingrequests()}">     loading ... </div> 

hope helps


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -