防止 IE 缓存 AngularJS/Restangular
Prevent IE caching AngularJS/Restangular
在 IE 中,当我对列表中的项目进行更新或销毁时,操作成功,但更新后的 list/data 未从服务器返回,因此列表未更新视图。
我已尝试以下方法无济于事:
angular.module('casemanagerApp')
.config(function($stateProvider, $urlRouterProvider, RestangularProvider) {
if (!RestangularProvider.setDefaultHeaders) {
RestangularProvider.setDefaultHeaders({});
}
RestangularProvider.setDefaultHeaders({'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT'});
RestangularProvider.setDefaultHeaders({'Cache-Control': 'no-cache'});
RestangularProvider.setDefaultHeaders({'Pragma': 'no-cache'});
$stateProvider
...
});
任何人都可以指出正确的方向来解决这个问题吗?
锐利机器
您必须在控制器中手动完成
你的看法
<li ng-repeat="item in items">
<a href="#" ng-click="delete(item)"></a>
</li>
你的控制器
$scope.delete = function(item) {
var index = $scope.items.indexOf(item);
if (index > -1) $scope.items.splice(index, 1);
};
我建议配置 $httpProvider
而不是 RestangularProvider
,因为 Restangular 在幕后使用 $http
:
angular.module('casemanagerApp')
.config(function($stateProvider, $urlRouterProvider, $httpProvider) {
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get.Pragma = 'no-cache';
//...
});
编辑
我刚刚通读了 restangular.js 代码,setDefaultHeaders
函数看起来并没有附加更多 headers,而是覆盖了默认的 headers:
object.setDefaultHeaders = function(headers) {
config.defaultHeaders = headers;
object.defaultHeaders = config.defaultHeaders;
return this;
};
这意味着您只设置了 'Pragma'
header,这可能不足以阻止缓存。
您可以尝试执行以下操作:
RestangularProvider.setDefaultHeaders({
'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',
'Cache-Control': 'no-cache',
'Pragma': 'no-cache'
});
这样只有 Restangular 调用会添加 headers,而常规 http
调用不会。
在 IE 中,当我对列表中的项目进行更新或销毁时,操作成功,但更新后的 list/data 未从服务器返回,因此列表未更新视图。
我已尝试以下方法无济于事:
angular.module('casemanagerApp')
.config(function($stateProvider, $urlRouterProvider, RestangularProvider) {
if (!RestangularProvider.setDefaultHeaders) {
RestangularProvider.setDefaultHeaders({});
}
RestangularProvider.setDefaultHeaders({'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT'});
RestangularProvider.setDefaultHeaders({'Cache-Control': 'no-cache'});
RestangularProvider.setDefaultHeaders({'Pragma': 'no-cache'});
$stateProvider
...
});
任何人都可以指出正确的方向来解决这个问题吗?
锐利机器
您必须在控制器中手动完成
你的看法
<li ng-repeat="item in items">
<a href="#" ng-click="delete(item)"></a>
</li>
你的控制器
$scope.delete = function(item) {
var index = $scope.items.indexOf(item);
if (index > -1) $scope.items.splice(index, 1);
};
我建议配置 $httpProvider
而不是 RestangularProvider
,因为 Restangular 在幕后使用 $http
:
angular.module('casemanagerApp')
.config(function($stateProvider, $urlRouterProvider, $httpProvider) {
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get.Pragma = 'no-cache';
//...
});
编辑
我刚刚通读了 restangular.js 代码,setDefaultHeaders
函数看起来并没有附加更多 headers,而是覆盖了默认的 headers:
object.setDefaultHeaders = function(headers) {
config.defaultHeaders = headers;
object.defaultHeaders = config.defaultHeaders;
return this;
};
这意味着您只设置了 'Pragma'
header,这可能不足以阻止缓存。
您可以尝试执行以下操作:
RestangularProvider.setDefaultHeaders({
'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',
'Cache-Control': 'no-cache',
'Pragma': 'no-cache'
});
这样只有 Restangular 调用会添加 headers,而常规 http
调用不会。