AngularJS: usare il web storage come cache

AngularJS: usare il web storage come cache

Il web storage può essere usato in AngularJS per creare un sistema di caching al fine di evitare di effettuare troppe chiamate alle API.

Possiamo definire il web storage come servizio:


angular.module('MyApp').factory('Storage', function() {
    return {
	    
        type: sessionStorage,
        
        save: function(item, value) {
            this.type.setItem(item, value);
        },
        
        read: function(item) {
            return this.type.getItem(item);
        },
        
        remove: function(item) {
            this.type.removeItem(item);
        },
        
        hasItem: function(item) {
            return (this.read(item) !== null);
        },
        
        empty: function() {
            this.type.clear();
        },
        
        items: function() {
            return this.type.length;
        },
        
        saveAsJSON: function(item, value) {
            this.save(item, JSON.stringify(value));
        },
        
        readAsJSON: function(item) {
            var value = this.read(item);
            return JSON.parse(value);
        }
    };
});

Quindi possiamo usarlo in questo modo:


angular.module('MyApp').controller('TimeLineCtrl', ['$scope', 'Twitter', 'Storage', function($scope, Twitter, Storage) {
	$scope.latestTweets = {};

	if(!Storage.hasItem('twitter-app-timeline')) { // Cache vuota

		Twitter.getTweets('/status/timeline', {}, function(tweets) {
			$scope.latestTweets = data.tweets;
			Storage.saveAsJSON('twitter-app-timeline', data.tweets);
		});
	} else {
		// Leggiamo dalla cache
		$scope.latestTweets = Storage.readAsJSON('twitter-app-timeline');
	}
}]);

Torna su