我必须将所有资源内联到一个文件中,这包括我的应用程序使用的所有数据。通过gulp进程,我已经能够使用所有数据创建$ cacheFactory:
angular.module('app').run('$cacheFactory', '$http', function($cacheFactory, $http){
var $httpDefaultCache = $cacheFactory.get('$http');
$httpDefaultCache.put('/data/names.json',{...});
$httpDefaultCache.put('/data/places.json',{...});
});
我对如何访问此内容而不是外部调用(文件)的理解可能不正确。
我认为通过设置$ httpProvider.defaults.cache = true,我对上述端点的请求将使用默认缓存。
.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.cache = true;
}]);
相反,我得到
的错误https://.../data/names.json 404 (Not Found)
好像它在客户端内部而不是在角度缓存中查找。类型也是xhr。
data.load(names, '/data/names.json');
...
function load(broadcastName, url, force){
if(!isLoaded[broadcastName] && !force){
console.log('Loading name data from', url);
// Make the http GET request
http({
method: 'GET',
url: url,
cache: true
}).then(function success(response){
console.log("response: ", response)
...
})
必须创建一个完全模仿angular $ http服务的自定义http请求。它用于我们的其他几个应用程序,所以我知道它的工作原理。只有为此实现添加的内容是cache:true。
我看过其他几个类似的问题,但我仍然不明白它是如何工作的。如何使用http默认缓存工作?有什么我应该知道的,我可能正在掩饰?
我希望这是有道理的。
答案 0 :(得分:0)
像{$ httpDefaultCache'这样的$http
缓存没有特殊术语。它的工作方式就像你期望的那样。您将 $httpProvider.defaults.cache
或cache
请求选项设置为true,并从$http
缓存中检索响应,该缓存默认为$cacheFactory.get('$http')
缓存只是键/值存储。如果请求URL与密钥完全不匹配,则不会使用缓存。
Here's an example它是如何运作的:
$cacheFactory.get('$http').put('/foo', 'foo');
$http({ url: '/foo', cache: true })
.then(result => {
$scope.foo = result.data;
})
.catch(result => console.error(result))