2

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

编辑: 例如,这个工厂在导航到另一个路由后不返回缓存结果,它调用服务器 api 来获取结果:

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

如何防止默认缓存在路由更改后从自身中删除项目?

4

3 回答 3

2

我找到了问题的根源。这是我自己的错。我在某处有一个代码可以在状态更改后清除缓存。默认角度 $http 缓存没有问题。

于 2016-04-16T11:17:53.230 回答
1

我会将此作为评论,但我还没有足够的积分..

你能尝试某种形式的记忆吗?换句话说,在作用域上有一个模型,那么,如果模型未定义,触发 $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 语句可能会降低效率。

我没有测试过这个,只是把这个想法扔在那里。我对这个问题也很感兴趣。

于 2016-04-16T09:32:02.707 回答
0

那不应该与ui-routeror相关$http。以下是您需要确认的几件事:

  1. 您的服务器(为您的资源提供服务)是否正在设置缓存标头
  2. 确保您没有使用Ctrl + F5刷新页面
  3. 如果您使用的是 Chrome 浏览器,请确保Disable cache未选中某个设置
于 2016-04-16T08:04:43.040 回答