防止IE缓存AngularJS / Restangular

前端之家收集整理的这篇文章主要介绍了防止IE缓存AngularJS / Restangular前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在IE中,当我更新或销毁列表中的项目时,操作成功,但更新的列表/数据不会从服务器返回,因此列表未在视图中更新.

我试过以下无济于事:

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

  ...
});

有人能指出我正确的解决方案吗?

解决方法

我建议配置$httpProvider而不是RestangularProvider,因为Restangular在幕后使用$http:

angular.module('casemanagerApp')
.config(function($stateProvider,$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函数看起来好像没有附加更多的头文件但是覆盖了默认的头文件

object.setDefaultHeaders = function(headers) {
  config.defaultHeaders = headers;
  object.defaultHeaders = config.defaultHeaders;
  return this;
};

这意味着您只设置了“Pragma”标头,这可能不足以阻止缓存.

您可以尝试执行以下操作:

RestangularProvider.setDefaultHeaders({
    'If-Modified-Since': 'Mon,26 Jul 1997 05:00:00 GMT','Cache-Control': 'no-cache','Pragma': 'no-cache'
});

这种方式只有Restangular调用添加标题,而常规的http调用则不会.

猜你在找的Angularjs相关文章