路径更改后,角度默认$ http缓存删除

路径更改后,角度默认$ http缓存删除

问题描述:

我在其中一项服务中使用Angular的默认$http缓存。当用户从视图导航到另一个视图时(我正在使用ui-router),缓存将无效,并且所有项目都将从其中删除。我想在应用程序的整个生命周期内不会使缓存失效。

编辑: 例如,该工厂没有导航到另一条路线后返回缓存的结果,它调用服务器API来获取结果:

cardModule.factory("myFactory", function ($http) { 
    return { 
     getAll: function() { 
      return $http.get("all", { cache: true }) 
     } 
    } 
}); 

如何防止默认缓存从移除项目从路线改变后的本身?

+0

你能提供一个JSBin或plunkr代码示例吗? –

+0

困惑。服务中的缓存将保留。如果再次调用该服务,则缓存将被服务而不是新的呼叫。 – Jorg

我发现问题的根源。这是我自己的错。我有一个代码在状态改变后清除缓存。默认角度$ http缓存没有问题。

这不应与ui-router$http有关。这里有您需要确认几件事情:

  1. 是您的服务器(这是服务资源),是设置缓存头或不
  2. 确保您使用的不是Ctrl + F5刷新页面
  3. 如果您使用Chrome浏览器,请确保设置Disable cache未被选中
+0

我不刷新页面,我只是导航到另一个视图。该问题与http协议缓存无关。这是angular的$ http缓存问题。 – alisabzevari

+0

哦!让我检查 –

我将离开这个作为一个评论,但我没有足够的积分尚未..

你可以尝试一些形式的memoisation?换句话说,在范围上有一个模型,那么,如果模型未定义,触发$ http调用?例如:

var ctrl = this; 

ctrl.product = undefined; // or null 

if (ctrl.product === undefined) { // or null 
    $http.get(...).then(function(resp) { 
    ctrl.product = resp.data; 
    }; 
}; 

这样模型被初始化,并且只调用一次。一个可能的缺点是if语句可能会导致效率低下。

我还没有测试过,只是把想法抛出去了。我对这个问题也很感兴趣。

+0

是的,我可以。但是angular有一个很好的缓存机制,我想使用它的最佳实践。我也可以编写自己的cacheProvider,但我认为angular的默认缓存功能可以解决问题。 – alisabzevari

+0

太棒了!你比我更先进^^我会做更多的研究并关注这个问题。 – Onyooo

+0

[NG-Book](https://www.ng-book.com/p/Caching/#default-http-cache)建议使用如下操作来控制默认的$ cache:var cache = $ cacheFactory.get( '$ HTTP'); var usersCache = cache.get('http://example.com/api/users.json');'。这可能比写一个自定义的短。 – Onyooo