Angular 默认 $http 缓存在路由更改后删除

Angular default $http cache removes after route change

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

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

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

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

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

  1. 您的服务器(为您的资源提供服务)是否正在设置缓存header
  2. 确保您没有使用 Ctrl + F5 刷新页面
  3. 如果您使用的是 Chrome 浏览器,请确保未选中设置 Disable cache

我会把它留作评论,但我还没有足够的积分..

你能试试某种形式的记忆吗?换句话说,在作用域上有一个模型,然后,如果模型未定义,触发 $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$http缓存是没有问题的。