9
我想確保我的用戶在部署後看到我的Angular應用的最新版本。在這種情況下清除模板緩存的正確策略是什麼?部署後清除模板緩存
我看過你可以做$templateCache.removeAll()
的地方app.run
,但是這會完全禁用緩存嗎?
我想確保我的用戶在部署後看到我的Angular應用的最新版本。在這種情況下清除模板緩存的正確策略是什麼?部署後清除模板緩存
我看過你可以做$templateCache.removeAll()
的地方app.run
,但是這會完全禁用緩存嗎?
您需要編寫一個攔截器並「捕獲」所有模板請求 - 您應該可以在此攔截器中添加一個URL參數來對您的模板資產進行版本化。
例子:
// 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;
}
};
你當然需要在每次部署新版本的時間來更新這個應用程序的配置(通過構建任務可以自動更新這個文件)。您可能需要添加額外的檢查(例如,如果URL路徑以'.html'結尾,請進行比較),以確保您不會高估實際的HTTP請求。
這種方法的下降是有時你可能有一個模板沒有更新,你不希望瀏覽器緩存被丟棄。如果這是你的情況,那麼你應該爲每個添加一些md5(templateContent)---這可以通過Grunt/Gulp在構建時實現。
只要添加檢查'if(request.url.endsWith(「。html」)){...}'就像一個魅力!我爲這個問題嘗試了很多解決方案,這對我的用例來說是最好的。 – hmartos
@hmartos請注意,.endsWith在所有瀏覽器和平臺上都不被支持。 – tuks