मैं कुछ इसी तरह की तलाश में इस धागे में आया था, लेकिन पाया कि $ संसाधन आपके लिए कैश को स्वचालित रूप से प्रबंधित करेगा, इसलिए कैश को साफ करने के लिए मजबूर करने की कोई आवश्यकता नहीं है।
विचार यह है कि यदि आपके पास एक संसाधन है जिसे आप क्वेरी कर सकते हैं, तो उस क्वेरी प्रतिक्रिया को कैश किया जाएगा, लेकिन यदि आप उसी संसाधन के लिए कुछ बचाते हैं, तो पहले से कैश किया गया डेटा अमान्य होना चाहिए, इसलिए यह आपके लिए क्लियर हो गया है। यह समझ में आता है कि यह इस तरह से काम करेगा।
यहाँ कुछ कोड का उपयोग मैं कर रहा हूँ (आप संभवतः विषम दिखने वाले कारखाने निर्माण भाग को अनदेखा कर सकते हैं और "क्लास" बॉडी पर ध्यान दे सकते हैं)।
'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 का उपयोग करने की कोशिश कर रहा है और जो सही समय पर कैश को साफ़ कर रहा है।
मुझे लगता है कि कहानी की नैतिकता यहां लाइब्रेरी के साथ काम करना है और सभी अच्छी तरह से होगी ... किसी भी कीड़े या अपूर्ण सुविधाओं को छोड़कर, लेकिन एंगुलर में से कोई भी नहीं है;)
ps यह सब AngularJS 1.2.0 पर चल रहा है।
cache
-{boolean|Cache}
- यदि सही है, तो जीईटी अनुरोध को कैश करने के लिए डिफ़ॉल्ट $ http कैश का उपयोग किया जाएगा, अन्यथा यदि कैश उदाहरण के साथ बनाया गया है