无法理解angularjs $ httpDefaultCache,$ cacheFactory以及如何访问该数据

时间:2017-04-12 16:24:03

标签: angularjs caching

我必须将所有资源内联到一个文件中,这包括我的应用程序使用的所有数据。通过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默认缓存工作?有什么我应该知道的,我可能正在掩饰?

我希望这是有道理的。

1 个答案:

答案 0 :(得分:0)

像{$ httpDefaultCache'这样的$http缓存没有特殊术语。它的工作方式就像你期望的那样。您将 $httpProvider.defaults.cachecache请求选项设置为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))