5

我利用了templateUrl,它工作的很棒!更新緩存模板

app.directive('myDir', function() { 
    return { 
     templateUrl: 'partials/directives/template.html' 
    }; 
}; 

但是...當我對這些模板進行更改時,它不會更新。在開發中,它不是一個大問題,因爲我知道更新的內容並且可以手動清除緩存。

但我無法清除所有用戶的緩存。有沒有辦法做到這一點?像使用CACHE-CONTROL元標籤或類似的東西?

+0

當您刷新瀏覽器時,AngularJS templateCache將被清除。如果您仍然使用舊模板,則由於瀏覽器緩存了部分內容。正如你所說,你需要檢查緩存標題並進行調整 – Chandermani 2014-10-06 09:00:32

+0

我不確定要添加什麼。我是否向index.html添加「無緩存」?或者我將它添加到每個部分?我也注意到服務器正在發送ETAG元數據,爲什麼不使用瀏覽器(chrome)?(? – 2014-10-06 09:30:41

+0

)您是否找到了解決此問題的方法?如果是這樣,請分享。 – Troels 2016-11-30 11:12:49

回答

1

據我看到的,你有兩個選擇 -

  1. 使用$cacheFactory服務,刪除舊的緩存 模板後已被提取,角緩存在默認$ templateCache服務

    // Please note that $cacheFactory creates a default key '$http' 
    
    var cache = $cacheFactory.get('$http'); 
    
    // The remove() function removes a key-value pair from the cache, 
    // if it’s found. If it’s not found, then it just returns undefined. 
    
    cache.remove(your url); 
    
  2. 使用文件版本號 重命名每個更改的文件 - 即如果您的第一個版本的文件是template-1.0.1.html,當您進行一些代碼更改時,將其重命名爲templ ate-1.0.2.html等。這樣,每次進行一些更改時都會下載新文件。

+0

謝謝,但沒有更好的方法嗎?您的解決方案都試圖解決症狀而不是原因。我正在尋找的修復方法是瀏覽器知道文件已更新,然後提取它新的,例如使用meta ETAG – 2014-10-06 11:46:56

+0

還有另一種方法 - 將模板存儲在js文件中。沒有被角度緩存。 – omickron 2015-05-02 19:08:06

+0

如果我們指的是這些'技巧',那麼我記得一箇舊的,你不需要改變模板文件的名稱,但你需要改變請求。所以它會像'templateUrl:'tplFile.html?v = 20150503'一樣 – george007 2016-05-02 17:08:45

0

一個快速和骯髒的解決辦法是在$httpProvider

app.config(function ($httpProvider) { 
    $httpProvider.defaults.headers.get = { 
     'Cache-Control': 'no-cache' 
    }; 
}); 

禁用緩存我不建議這一點。但它的工作。