2015-10-06 31 views
9

मैं यह सुनिश्चित करना चाहता हूं कि मेरे उपयोगकर्ता तैनाती के बाद मेरे कोणीय ऐप का नवीनतम संस्करण देखें। उस मामले में टेम्पलेट कैश को साफ़ करने के लिए सही रणनीति क्या है?तैनाती के बाद टेम्पलेट कैश साफ़ करें

मैंने कहीं पढ़ा है $templateCache.removeAll()app.run में, लेकिन यह मुझे लगता है कि कैशिंग को पूरी तरह अक्षम कर देगा?

उत्तर

9

आपको एक इंटरसेप्टर लिखना होगा और सभी टेम्पलेट अनुरोधों को "पकड़ना" होगा - आपको एक यूआरएल पैरामीटर जोड़ने के लिए इस इंटरसेप्टर में सक्षम होना चाहिए जो आपकी टेम्पलेट संपत्तियों का संस्करण होगा।

उदाहरण:

// App .config() 
$httpProvider.interceptors.push(function($templateCache) { 
    return { 
    'request' : function(request) { 
     if($templateCache.get(request.url) === undefined) { // cache miss 
      // Item is not in $templateCache so add our query string 
      request.url = request.url + '?appVersion=' + appService.getConfig().version; 
     } 
     return request; 
    } 
}; 

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

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

+1

बस चेक 'if (request.url.endsWith ("। Html")) {...} 'आकर्षण की तरह काम करता है! मैंने इस समस्या के लिए बहुत सारे समाधानों की कोशिश की और यह मेरे उपयोग के मामले में सबसे अच्छा है। – hmartos

+0

@hmartos बस सावधान रहें, .ends सभी ब्राउज़रों और प्लेटफॉर्म पर अच्छी तरह से समर्थित नहीं है। – tuks

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