如何在AngularJS中完全禁用缓存

时间:2014-05-07 08:25:26

标签: json angularjs caching angularjs-scope

我使用表单提交值。当我点击提交按钮时,它会调用edit()。 值存储在数据库中(使用php / mysql)。到目前为止一切正常。

我在同一局部视图上检索值。在window.location.reload();页面将刷新,但值不会立即更新。经过几次刷新后,它就是了 (当我的DevTools打开时,缓存被禁用......所以它立即更新)

如果没有打开DevTools,即使我放了一些函数来禁用缓存,缓存仍然有效。

listingProjectApp.run(function($rootScope, $templateCache) {
  $rootScope.$on('$viewContentLoaded', function() {
     $templateCache.removeAll();
  });
});

listingProjectApp.factory('EditCache', function($cacheFactory) {
 return $cacheFactory('editCache', {
   capacity: 1
 });
});

listingControllers.controller('editProjectCtrl', ['$scope', '$http', '$routeParams',      'EditCache',
function ($scope, $http, $routeParams, EditCache) {
var result = EditCache.get('$http');

if( result ){
    $scope.project = result;
    console.log("Results from cache");
}
else {      
    $http({
        url: "php/getProjectDetails.php",
        method: "GET",
        cache: false,
        params: { 'id': $scope.projectId }
    }).success(function(data) {
        $scope.project = data;
        EditCache.put('$http', data);
        console.log("New results");
    });     
}
console.log(EditCache.info())

$scope.edit = function(project){

    console.log(project);
    $http({
        url: "php/edit.php",
        method: "POST",
        data: project
    }).success(function(id) {
        EditCache.removeAll();
        window.location.reload();
    });

    return false;

}
   }]);

1 个答案:

答案 0 :(得分:4)

看起来它不是AngularJS缓存的错误,而是浏览器的错误:对于浏览器,您的XHR请求是简单的HTTP GET请求,并且所有缓存策略都应用于它们。为了避免缓存部分内容,您必须调整后端以发送适当的标头以禁止缓存,或使用旧的随机后缀技巧:向params添加另一个虚拟参数(如{{ 1}})。这样,每个GET请求都是唯一的,并且您不会点击缓存。