2015-08-28 6 views
3

В IE, когда я делаю обновление или уничтожение элемента в списке, действие выполняется успешно, но обновленный список/данные не возвращаются с сервера, поэтому список не является обновлено в представлении.Предотвращение кэширования IE AngularJS/Restangular

Я попытался следующим без толка:

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 

    ... 
}); 

Может кто-нибудь мне точку в правильном направлении для решения этого?

ответ

6

Я бы рекомендовал настройки $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'; 
    //... 

}); 

EDIT

Я просто прочитать код 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 вызовы не будут.

+0

Спасибо, босс! Это сработало. Но почему работает «RestangularProvider»? – sharpmachine

+0

Я думал, вы упомянули, что «RestangularProvider» не работает? В любом случае, если есть любые вызовы 'http', которые вы делаете без Restangular, теперь вы знаете, что они также не будут кэшироваться. – yvesmancera

+0

Да, 'RestangularProvider' не работал, но когда я переключился на' httpProvider' за ваше предложение, все сработало. Поэтому я просто спросил, почему «RestangularProvider» не работал. – sharpmachine

0

sharpmachine

Вам придется сделать это вручную в контроллере

Ваше мнение

<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); 
}; 
+0

Проблема не в моей функции. Это кеширование IE. – sharpmachine