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