AngularJS控制器在Firefox和IE中缓存:如何禁用?

时间:2015-01-25 12:12:23

标签: javascript angularjs internet-explorer firefox caching

在我的角度应用程序中,我有以下控制器(我删除了一些隐私政策的方法):

.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中没有变化。为什么?

2 个答案:

答案 0 :(得分:2)

对不起,我没有直接回答这个问题,但即将发生的事情似乎很重要。

我和其他人强烈反对现在使用ngStorage。

确实,ngStorage似乎非常非常方便。您只需直接更改对象,voilà,一切正常。我用了一点,这很酷:)

但是,遗憾的是,当您尝试高级使用时,或者当您查看源代码时,您会发现存在一些问题。这个令人敬畏的“立即localStorage对象修改”是使用$ rootScope观察内容。这对性能来说不是一个好主意。此外,您可能已经看到一些GitHub issues正在声明类似的同步问题,就像您一样。此外,请注意该项目现在完全没有维护。在生产中使用这样的库是个坏主意。

因此,您可以尝试使用另一种解决方案来使与localStorage的链接(例如Angular Locker)越来越多地被使用。这将导致一些代码重构,但你未来的自我将感谢你没有使用有问题的库。

答案 1 :(得分:0)

首先确保id参数正确。第二,确保请求标头没有缓存。可能你有请求拦截器和这个拦截器覆盖标头。在firebug中为firefox跟踪此请求。

如果你看到“没有缓存”的话。值检查服务器。也许服务器可以缓存这个。