2014-05-11 5 views
14

के साथ टेम्पलेट कैशिंग अक्षम करें मैंने देखा है कि समय-समय पर मैं अपने एंगुलरजेएस एप्लिकेशन के भीतर एक टेम्पलेट में बदलाव करूंगा और रनटाइम पर, परिवर्तन दिखाई नहीं देगा। इसके बजाय, मुझे एप्लिकेशन को रीफ्रेश करना होगा और यदि यह विफल हो जाता है, तो टेम्पलेट के पथ पर जाएं और इस परिवर्तन को देखने के लिए इसे रीफ्रेश करें।एंगुलरजेएस में ui-राउटर

इस तरह के टेम्पलेट्स को कैशिंग रोकने से रोकने का सबसे अच्छा तरीका क्या है? आदर्श रूप से, मैं उन्हें कोणीय अनुप्रयोग के वर्तमान उपयोग के दौरान कैश किया जाना चाहता हूं, लेकिन अगली बार जब मैं पृष्ठ लोड करता हूं, तो वे मैन्युअल रूप से रीफ्रेश किए बिना नवीनतम और महानतम टेम्पलेट पुनर्प्राप्त करते हैं।

यदि मैं यहां कोई फर्क पड़ता हूं तो मैं यूई-राउटर का उपयोग कर रहा हूं। धन्यवाद!

+1

http://stackoverflow.com/questions/14718826/angularjs-disable-partial-caching-on-dev-machine –

उत्तर

16

आप एक डेकोरेटर का उपयोग करें और यूआई रूटर के $ templateFactory सेवा को अपडेट कर सकते templateUrl

function configureTemplateFactory($provide) { 
    // Set a suffix outside the decorator function 
    var cacheBuster = Date.now().toString(); 

    function templateFactoryDecorator($delegate) { 
     var fromUrl = angular.bind($delegate, $delegate.fromUrl); 
     $delegate.fromUrl = function (url, params) { 
      if (url !== null && angular.isDefined(url) && angular.isString(url)) { 
       url += (url.indexOf("?") === -1 ? "?" : "&"); 
       url += "v=" + cacheBuster; 
      } 

      return fromUrl(url, params); 
     }; 

     return $delegate; 
    } 

    $provide.decorator('$templateFactory', ['$delegate', templateFactoryDecorator]); 
} 

app.config(['$provide', configureTemplateFactory]); 
+0

मैं इस कारण से यूई-राउटर पर स्विच कर रहा हूं, लेकिन मुझे आपका उदाहरण काम करने में कठिनाई हो रही है। क्या आप यह उपलब्ध करा सकते हैं कि मैं वास्तव में टेम्पलेट यूआरएल में प्रत्यय को जोड़ने के लिए कैसे कहूंगा? धन्यवाद। – iTrout

+1

इस कॉन्फ़िगरेशन विकल्प के बारे में जानना अच्छा है, लेकिन क्या वे सभी अद्वितीय-आईडी वाले पृष्ठ क्लाइंट साइड कैश में जमा नहीं होंगे? –

+0

उपर्युक्त कोड ब्राउज़र कैश के लिए एक वर्कअराउंड है, इसलिए अगली बार जब आप अपना एप्लिकेशन पुनः लोड करेंगे तो कैशबस्टर वैरिएबल का मान अलग होगा और टेम्पलेट सर्वर से फिर से प्राप्त किए जाएंगे। विचार प्रत्येक सत्र के लिए कैशबस्टर का एक अलग मूल्य होना है। –

1

समाधान से ऊपर के लिए एक प्रत्यय संलग्न करने के लिए बढ़िया था और टेम्पलेट यूआरएल

function templateUrl: function($stataParams) { return '/serverUrl?id=' + $stataParams.id + '&cid=' + $stataParams.cid; } 

द्वारा तय के लिए काम नहीं कर रहा था
function templateFactoryDecorator($delegate) { 
    var fromUrl = angular.bind($delegate, $delegate.fromUrl); 
    $delegate.fromUrl = function (url, params) { 
     if (url !== null && angular.isDefined(url)) { 
      if (typeof url == 'function') { 
       url = url.call(url, params); 
      } 
      if (angular.isString(url)) { 
      url += (url.indexOf("?") === -1 ? "?" : "&"); 
      url += "v=" + Date.now().toString(); 
      } 
     } 

     return fromUrl(url, params); 
    }; 

    return $delegate; 
} 
+1

ग्रेट सॉल्यूशन !, लेकिन यह निर्देश टेम्पलेट्स के लिए मेरे लिए काम नहीं कर रहा है – hmartos