ฉันเจอหัวข้อนี้โดยมองหาสิ่งที่คล้ายกัน แต่พบว่า $ resource จะจัดการแคชให้คุณโดยอัตโนมัติดังนั้นจึงไม่จำเป็นต้องบังคับให้ล้างแคช
แนวคิดก็คือถ้าคุณมีทรัพยากรที่คุณสามารถสืบค้นได้การตอบกลับแบบสอบถามนั้นจะถูกแคช แต่ถ้าคุณบันทึกบางสิ่งสำหรับทรัพยากรเดียวกันนั้นข้อมูลที่แคชไว้ก่อนหน้านี้จะต้องไม่ถูกต้องดังนั้นจึงถูกล้างให้คุณ มันทำให้รู้สึกว่ามันจะทำงานในลักษณะนี้
นี่คือรหัสบางส่วนที่ฉันใช้เพื่อทำสิ่งนี้ (คุณสามารถเพิกเฉยต่อส่วนการสร้างโรงงานที่ดูแปลก ๆ และให้ความสนใจกับเนื้อหา "คลาส")
'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}
- ถ้าเป็นจริงแคช $ http เริ่มต้นจะถูกใช้เพื่อแคชคำขอ GET มิฉะนั้นหากอินสแตนซ์แคชที่สร้างด้วย