问题
- 默认情况下,angular的$http仅仅缓存“get”和’jsonp’的请求数据.
angular $http缓存的源码分析
if ((config.cache || defaults.cache) && config.cache !== false &&
(config.method === 'GET' || config.method === 'JSONP')) {
cache = isObject(config.cache) ? config.cache
: isObject(defaults.cache) ? defaults.cache
: defaultCache;
console.log('cache',cache);
}
if (cache) {
cachedResp = cache.get(url);
...
}
- 首先我们要通过 config.method和config.cache的校验
- 其次要一个唯一的url,可以利用angular自带的URL编码服务$httpParamSerializer,编码data对象来生成,其他的方法也可以,只要唯一就行
- 另外,如果只是单纯的改成get请求,发给后端的时候,就真是是get请求了。而我们发给后台的应该是post请求。所以第一次请求,必须原封不动的发给后台。这就导致了,我们只能自己创建一个容器来缓存数据。并且是 cacheFactory创建的容器,这