GitHub - ajoslin/angular-promise-tracker: Easily add spinners or general request tracking to your angular app (original) (raw)

angular-promise-tracker

Version: 2.0

(note to users using version 1.x: upgrading has many breaking changes, see the CHANGELOG.)

Build Status

Small, feature filled library used to easily add spinners or general promise/request tracking to your angular app.

Quick Start

The basic idea: each time we add one or more promises to an instance of a promiseTracker, that instance's active() method will return true until all added promises are resolved. A common use case is showing some sort of loading spinner while some http requests are loading.

Play with this example on plunkr

$ bower install angular-promise-tracker

Loading...
Delay Something Fetch Something

angular.module('myApp', ['ajoslin.promise-tracker']) .controller('MainCtrl', function($scope, http,http, http,timeout, promiseTracker) { //Create a new tracker $scope.loadingTracker = promiseTracker();

//use addPromise to add any old promise to our tracker $scope.delaySomething = function() { var promise = $timeout(function() { alert('Delayed something!'); }, 1000); $scope.loadingTracker.addPromise(promise); };

//use tracker: shortcut in $http config to link our http promise to a tracker //This shortcut is included in promise-tracker-http-interceptor.js $scope.fetchSomething = function(id) { return $http.get('/something', { tracker: $scope.loadingTracker }).then(function(response) { alert('Fetched something! ' + response.data); }); }; });

API Documentation

Service promiseTracker

Often you want a global promiseTracker (eg to show a loading screen); one easy way is to put the tracker on your $rootScope:
app.run(function($rootScope, promiseTracker) {
$rootScope.loadingTracker = promiseTracker();
});

Instantiated promiseTracker

Example: var myTracker = promiseTracker({ activationDelay: 500, minDuration: 750 });

$http Sugar

Requires promise-tracker-http-interceptor.js

//Add $http promise to tracker with id 'myTracker' $http('/banana', { tracker: myPromiseTrackerInstance })

//Add $http promise to both 'tracker1' and 'tracker2' $http.post('/elephant', {some: 'data'}, { tracker: [myFirstTracker, mySecondTracker] })

More Examples

angular.module('app', ['ajoslin.promise-tracker'])

.factory('myTracker', function (promiseTracker) { return promiseTracker(); })

.controller('AppCtrl', function ($rootScope, myTracker) { rootScope.rootScope.rootScope.watch(myTracker.active, function (isActive) { //doSomething() }); });

Development

New Versions

License

Public Domain Mark angular-promise-tracker by Andy Joslin is free of known copyright restrictions.