Tôi đã xem qua chuỗi này đang tìm kiếm thứ gì đó tương tự, nhưng nhận thấy rằng $ resource sẽ tự động quản lý bộ nhớ cache cho bạn, vì vậy không cần phải buộc xóa bộ nhớ cache.
Ý tưởng là nếu bạn có một tài nguyên mà bạn có thể truy vấn, thì phản hồi truy vấn đó sẽ được lưu vào bộ nhớ cache, nhưng nếu bạn lưu thứ gì đó cho cùng một tài nguyên đó, thì dữ liệu đã lưu trong bộ nhớ cache trước đó phải không hợp lệ, vì vậy nó sẽ bị xóa cho bạn. Nó có ý nghĩa rằng nó sẽ hoạt động theo cách này.
Đây là một số mã tôi sử dụng để thực hiện việc này (bạn có thể bỏ qua phần tạo nhà máy có thể trông kỳ quặc và chú ý đến phần thân "lớp").
'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;
}]);
Nếu bạn gọi hàm listPlayers nhiều lần, cuộc gọi đầu tiên sẽ tạo ra một yêu cầu nhận http và tất cả các cuộc gọi tiếp theo sẽ được lưu vào bộ nhớ đệm. Tuy nhiên, nếu bạn gọi addPlayer, một bài đăng http sẽ được thực hiện như mong đợi, và sau đó lần gọi tiếp theo đến listPlayers sẽ thực hiện một http get (không được lưu trong bộ nhớ đệm).
Điều này giúp bạn không phải quản lý bộ nhớ cache ($ http) của người khác và cố gắng theo dõi url nào đang được sử dụng cho các yêu cầu và đang xóa bộ nhớ cache vào đúng thời điểm.
Tôi cho rằng đạo lý của câu chuyện ở đây là làm việc với thư viện và tất cả sẽ ổn ... ngoại trừ bất kỳ lỗi nào hoặc các tính năng chưa hoàn thiện, nhưng Angular không có bất kỳ điều nào trong số đó;)
ps Đây là tất cả chạy trên AngularJS 1.2.0.
cache
-{boolean|Cache}
- Nếu đúng, bộ đệm $ http mặc định sẽ được sử dụng để lưu vào bộ đệm yêu cầu GET, ngược lại nếu một phiên bản bộ đệm được xây dựng bằng