2016-03-29 6 views
5

मेरे पास एक पृष्ठ है जो उपयोगकर्ता के इच्छित होने के आधार पर अलग-अलग पैरामीटर के साथ, उसी स्थान पर http अनुरोध करता है।HTTP प्रतिक्रियाओं को कैश करने के लिए कोणीय 2 सबसे आसान तरीका

$.ajax({ 
    cache: true, 
    //other options... 
}); 

करता Angular2 कुछ इसी तरह है: उदाहरण आप ढांचे में एक कैश विशेषता है जो स्वचालित रूप से कैश और लागू करने के लिए बहुत आसान है का निर्माण किया है के लिए

this.http.post(//I am open to POST methods or GET methods as I have security in the back to prevent malicious writes. 
    'http://192.168.1.45:3000/mylocation', 
    'p1=' + param1 + '&p2=' + param2, 
    {headers: headers} 
) 

JQuery में: तो मेरी कोड कुछ इस तरह दिखता इसके लिए? जब तक उपयोगकर्ता एप्लिकेशन में होता है तब तक मैं इन गतिशील प्रतिक्रियाओं को कैश करना चाहता हूं। तो यदि कोई उपयोगकर्ता एक ही पैरामीटर के साथ एक ही यूआरएल का अनुरोध करता है तो यह इसे कैश से पकड़ लेगा, और यदि पैराम्स का अभी तक उपयोग नहीं किया गया था तो यह नेटवर्क कॉल करेगा।

मैं अनुरोध विकल्पों में Angular2 डॉक्स में कुछ भी नहीं मिला:

https://angular.io/docs/js/latest/api/http/RequestOptions-class.html

उत्तर

10

कैश डेटा, और अगर संचित डेटा उपलब्ध वापसी इस है, अन्यथा HTTP अनुरोध करते हैं। यदि आप अलग-अलग अनुरोधों (पैरामीटर) के लिए पुन: उपयोग करना चाहते हैं तो आप इसके बजाय सरणी में संदर्भों को संग्रहीत करने के लिए समायोजित कर सकते हैं।

getData() { 
    if(this.data) { 
     // if `data` is available just return it as `Observable` 
     return Observable.of(this.data); 
    else if(this.observable) { 
     // if `this.observable` is set then the request is in progress 
     // return the `Observable` for the ongoing request 
     return this.observable; 
    } else { 
     // create the request, store the `Observable` for subsequent subscribers 
     this.observable = this.http.get('/someUrl') 
      .map(res => res.json()) 
      .do(val => { 
      this.data = val; 
      // when the cached data is available we don't need the `Observable` reference anymore 
      this.observable = null; 
      }) 
      // make it shared so more than one subscriber can get the result 
      .share(); 
     return this.observable; 
    } 
} 
+0

उत्तर के लिए धन्यवाद। मुझे थोड़ा परेशानी हो रही है क्योंकि मैं देखने के लिए बहुत नया हूं इसलिए मुझे यकीन है कि मुझे यहां कुछ याद आ रही है। अगर मैं अधिक स्टोर करने की ज़रूरत है तो क्या मैं this.data और सरणी बना सकता हूं? और यदि ऐसा है तो यह सरणी के माध्यम से कैसे जाएगा और देखें कि पैरामीटर डेटा के समान हैं, केवल प्रतिक्रिया (डेटा) को स्टोर करेगा, पैरामीटर नहीं? धन्यवाद। – user2924127

+0

विधि को पैरामीटर के लिए कैश प्राप्त करने के लिए पैरामीटर के साथ डेटा को स्टोर करने की आवश्यकता होगी जब विधि को उसी पैरामीटर –

+0

धन्यवाद के साथ फिर से बुलाया जाता है। मैं यह देखने के लिए देखूंगा कि क्या मैं इसे कार्यान्वित कर सकता हूं। – user2924127

संबंधित मुद्दे