在我的角度应用程序中,我有以下控制器(我删除了一些隐私政策的方法):
.controller('ArticleCtrl', ['$http', '$scope', '$location', '$localStorage', '$q', '$templateCache', 'authService',
'uploaderService', 'settings',
function($http, $scope, $location, $localStorage, $q, $templateCache, authService, uploaderService, settings) {
$scope.isAuth = authService.checkAuthStatus() || false;
if ($scope.isAuth == false) {
$location.path('/signin');
}
$scope.username = $localStorage.authStatus.userName;
$scope.getCompany = function(id) {
$http.get(settings.apiBaseUri + '/app/' + id, {
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache'
}
})
.success(function(response) {
$scope.company = response;
$scope.company.Email = $scope.username;
})
.error(function(data, status, headers, config) {
console.log('operation failed, status: ' + data);
$location.path('/signin');
});
$scope.$apply();
};
if ($scope.isAuth == true) {
$scope.company = $localStorage.selectedCompany;
$templateCache.removeAll();
$scope.getCompany($localStorage.selectedCompany.Id);
}
}
]);
我花了很多时间,但我仍然不明白为什么只有这个控制器被缓存(其他控制器是通过复制粘贴制作的)。
但是当第一次调用此方法时:一切正常,在调试器中我看到它通过GET方法进入服务器,但是当我刷新页面,然后再次转到此控制器 - 在Firefox和IE中我看到没有新的服务器请求。但为什么?只有当我用Ctrl + F5
刷新页面时,一切正常。但是用户不会这样做,我需要工作申请......
也许有人知道如何解决这个问题?如何禁用angularjs视图和控制器缓存?
UPD : 我看到更新后我的localstorage在IE和Firefox中没有变化。为什么?
答案 0 :(得分:2)
对不起,我没有直接回答这个问题,但即将发生的事情似乎很重要。
我和其他人强烈反对现在使用ngStorage。
确实,ngStorage似乎非常非常方便。您只需直接更改对象,voilà,一切正常。我用了一点,这很酷:)
但是,遗憾的是,当您尝试高级使用时,或者当您查看源代码时,您会发现存在一些问题。这个令人敬畏的“立即localStorage对象修改”是使用$ rootScope观察内容。这对性能来说不是一个好主意。此外,您可能已经看到一些GitHub issues正在声明类似的同步问题,就像您一样。此外,请注意该项目现在完全没有维护。在生产中使用这样的库是个坏主意。
因此,您可以尝试使用另一种解决方案来使与localStorage的链接(例如Angular Locker)越来越多地被使用。这将导致一些代码重构,但你未来的自我将感谢你没有使用有问题的库。
答案 1 :(得分:0)
首先确保id参数正确。第二,确保请求标头没有缓存。可能你有请求拦截器和这个拦截器覆盖标头。在firebug中为firefox跟踪此请求。
如果你看到“没有缓存”的话。值检查服务器。也许服务器可以缓存这个。