Я натрапив на цей потік, шукаючи щось подібне, але виявив, що ресурс $ буде автоматично керувати кешем для вас, тому немає необхідності примусово очищати кеш.
Ідея полягає в тому, що якщо у вас є ресурс, який ви можете запитувати, відповідь на запит буде кешована, але якщо ви збережете щось для цього самого ресурсу, раніше кешовані дані повинні бути недійсними, тому вони будуть очищені для вас. Має сенс, що це спрацювало б так.
Ось деякий код, який я використовую для цього (ви можете проігнорувати можливу дивовижну частину створення фабрики та звернути увагу на тіло "класу").
'use strict';
sampleApp.players.$ng.factory('sampleApp.players.PlayerService', [
'$log',
'$resource',
sampleApp.players.PlayerService = function ($log, $resource) {
var service = {};
$log.info('Creating player resource.');
var Player = $resource('/api/players', {}, {query: {
isArray: true,
cache: true,
method: 'GET'
}});
service.addPlayer = function(playerName) {
$log.info('Saving a new player.');
return new Player({name: playerName}).$save();
};
service.listPlayers = function () {
$log.info('Fetching players.');
return Player.query();
};
return service;
}]);
Якщо ви кілька разів викликаєте функцію listPlayers, перший виклик робить запит на отримання http, а всі наступні дзвінки кешуються. Якщо ви викликаєте addPlayer, повідомлення http виконується, як очікувалося, і тоді наступний виклик listPlayers виконає отримання http (не кешоване).
Це не дозволяє вам керувати чужим кешем ($ http) і намагатися не відставати від того, які URL-адреси використовуються для запитів, а які очищають кеш-пам’яті в потрібний час.
Я припускаю, що мораллю історії тут є робота з бібліотекою, і все буде добре ... за винятком будь-яких помилок або неповних функцій, але Angular не має жодного з них;)
ps Це все працює на AngularJS 1.2.0.
cache
-{boolean|Cache}
- Якщо значення true, кеш-пам'ять $ http буде використана для кешування запиту GET, інакше якщо екземпляр кешу, побудований за допомогою