Каков наилучший способ в AngularJs для сохранения или кэширования временного ресурса в результате получения нескольких директив, которым нужен результат ресурса, чтобы получить его, не запрашивая снова и снова тот же ресурс на сервере?
Представьте себе, что у вас есть 5 директив, которым все они нуждаются в ресурсе
Это возвращает json учетных записей (метод GEST API GET).
Какова наилучшая практика кэширования результата этого ресурса или сохранения его в переменной, а затем каждая директива получает данные из этой переменной и избегает попадания остального API более одного раза в 1 минуту (так что срок действия кеша истекает через 1 минуту)
Большое спасибо.
Есть несколько способов сделать это, но один простой автономный путь будет примерно таким:
app.factory('myFactory', function($http) {
var THRESHOLD = 60000; // 60 seconds
var request = null;
var timestamp;
var service = {
getResource: function() {
var now = new Date().getTime();
// only make a request if we haven't made one yet
// or if its been longer than 60 seconds since the last request
if(request === null || timestamp && now - timestamp > THRESHOLD) {
timestamp = now;
request = $http.get('http://some.service.com/resource');
}
// we're always returning a promise, once its resolved any service that
// calls getResource won't have to wait for the request unless its been
// over 60 seconds since the last one.
return request;
}
}
return service;
});
Основная демонстрация здесь (слегка модифицирована для имитации HTTP-запроса): http://plnkr.co/edit/QncVlV?p=linter