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
无关。以下是您需要确认的几件事:
- 您的服务器(为您的资源提供服务)是否正在设置缓存header
- 确保您没有使用
Ctrl + F5
刷新页面
- 如果您使用的是 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缓存是没有问题的。
我在我的一项服务中使用 Angular 的默认 $http
缓存。当用户从一个视图导航到另一个视图时(我正在使用 ui-router
),缓存失效并且所有项目都将从中删除。我不想在我的应用程序的整个生命周期内使缓存失效。
编辑: 例如,这个工厂在导航到另一个路由后没有 return 缓存结果,它调用服务器 api 来获取结果:
cardModule.factory("myFactory", function ($http) {
return {
getAll: function () {
return $http.get("all", { cache: true })
}
}
});
如何防止默认缓存在路由更改后从自身删除项目?
那应该与 ui-router
或 $http
无关。以下是您需要确认的几件事:
- 您的服务器(为您的资源提供服务)是否正在设置缓存header
- 确保您没有使用
Ctrl + F5
刷新页面 - 如果您使用的是 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缓存是没有问题的。