路径更改后,角度默认$ http缓存删除
我在其中一项服务中使用Angular的默认$http
缓存。当用户从视图导航到另一个视图时(我正在使用ui-router
),缓存将无效,并且所有项目都将从其中删除。我想在应用程序的整个生命周期内不会使缓存失效。
编辑: 例如,该工厂没有导航到另一条路线后返回缓存的结果,它调用服务器API来获取结果:
cardModule.factory("myFactory", function ($http) {
return {
getAll: function() {
return $http.get("all", { cache: true })
}
}
});
如何防止默认缓存从移除项目从路线改变后的本身?
我发现问题的根源。这是我自己的错。我有一个代码在状态改变后清除缓存。默认角度$ http缓存没有问题。
这不应与ui-router
或$http
有关。这里有您需要确认几件事情:
- 是您的服务器(这是服务资源),是设置缓存头或不
- 确保您使用的不是
Ctrl + F5
刷新页面 - 如果您使用Chrome浏览器,请确保设置
Disable cache
未被选中
我不刷新页面,我只是导航到另一个视图。该问题与http协议缓存无关。这是angular的$ http缓存问题。 – alisabzevari
哦!让我检查 –
我将离开这个作为一个评论,但我没有足够的积分尚未..
你可以尝试一些形式的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语句可能会导致效率低下。
我还没有测试过,只是把想法抛出去了。我对这个问题也很感兴趣。
是的,我可以。但是angular有一个很好的缓存机制,我想使用它的最佳实践。我也可以编写自己的cacheProvider,但我认为angular的默认缓存功能可以解决问题。 – alisabzevari
太棒了!你比我更先进^^我会做更多的研究并关注这个问题。 – Onyooo
[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
你能提供一个JSBin或plunkr代码示例吗? –
困惑。服务中的缓存将保留。如果再次调用该服务,则缓存将被服务而不是新的呼叫。 – Jorg