angularjs存儲
1. 如何解決AngularJs在IE下取數據總是緩存的問題
如果用AngularJs在IE下發出GET請求從後台服務取完Json數據再綁定到頁面上顯示的話,你可能會發現就算數據更新了,IE還是會顯示原來的結果。實際上這時候IE的確是緩存了hashtag,沒有再次去做Http GET請求最新的數據。
最直接的辦法是在後台擼掉OutputCache,但這種做法並不推薦,需要改每一處被Angular調用的地方,代價太大。這種問題應該在前端解決最好。研究了一會兒總結了最有效的解決方法,並不需要改後台代碼了。
在你的app config里擼一個$httpProvider進去,比如像我這樣,和路由可以配在一起,當然分開配也沒問題。
var config = ["$routeProvider", "$httpProvider", function ($routeProvider, $httpProvider) {
// Initialize get if not there
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// Enables Request.IsAjaxRequest() in ASP.NET MVC
$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
// Disable IE ajax request caching
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
$routeProvider.when("/", { templateUrl: "Manage/dashboard/index.cshtml" })
.when("/dashboard", { templateUrl: "Manage/dashboard/index.cshtml" })
.when("/dashboard/serverinfo", { templateUrl: "Manage/dashboard/serverinfo.cshtml" })
.when("/dashboard/emaillogs", { templateUrl: "Manage/dashboard/emaillogs.cshtml" })
// other code....
.otherwise({ redirectTo: "/" });
}];
app.config(config);
最關鍵的就是最後的禁用IE對ajax的緩存
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
如果你想這樣寫,是會爆的:
$httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
這樣會導致include指令載入的partial view擼不出來,所以不要作死了
2. angularjs路由如何禁止緩存
angular默認的模板載入都會被緩存起來,使用的緩存服務是$tempalteCache,發送模板請求的服務是$templateRequest,可以有兩種方案:
1.每次發送$http請求模板完成後,調用$tempalteCache.remove(url)或removeAll清除所有模板緩存;
2.使用$provide.decorator改寫原生的$templateRequest,禁掉緩存,$templateRequest的源碼,可以看到它默認使用$tempalteCache作為緩存,可以去掉它。