Silence & Solitude makes...

Pu's mind space

angular.js的缓存设置

有些浏览器或用户把缓存开着,对于一些没有加时间戳的RESTFUL资源,需要强制禁用缓存。

我碰到这个问题时首先想到在HTML开头写上

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">

结果发现并不起作用,因为上面的代码只是不缓存页面,页面里的内容全是用ajax请求动态获取的,而ajax请求的路径被记录并缓存了。所以上面三行不起作用。

正确的做法是设置ajax请求头,对于jquery.ajax来说比较容易了,简单加个参数就好了;对于angular里面的$http、$resource这种封装得比较深的,可能就不知道怎么设置了,经过查阅API,发现可以设置$http的defaults,于是有了下面的写法

//禁用缓存
app.run(function($http) {
     $http.defaults.headers.common={
       'Cache-Control' : 'max-age=0',
     'If-Modified-Since':'0'
     };
});

其中app是angular module,上述代码片段放在app刚被定义之后即可起到全局作用。经试用可以解决问题,遂录于此,共鉴。