【问题标题】:How to completely disable the cache in AngularJS如何在 AngularJS 中完全禁用缓存
【发布时间】:2014-06-24 02:52:21
【问题描述】:

我使用表单来提交值。当我点击提交按钮时,它会调用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;

}
   }]);

【问题讨论】:

    标签: json angularjs caching angularjs-scope


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 2015-04-22
      相关资源
      最近更新 更多