我在AngularJS中缓存部分有问题。

在我的HTML页面,我有:

<body>
 <div ng-view></div>
<body>

我的偏导数被载入的地方。

当我改变HTML代码在我的部分,浏览器仍然加载旧数据。

有什么解决办法吗?


当前回答

如果你谈论的是用于模板缓存而不需要重新加载整个页面的缓存,那么你可以通过如下方式清空它:

.controller('mainCtrl', function($scope, $templateCache) {
  $scope.clearCache = function() { 
    $templateCache.removeAll();
  }
});

在标记中:

<巴顿ngk -click=“clearCache()”>清廉缓存</按钮>

并按此按钮清除缓存。

其他回答

在@Valentyn回答的基础上,这里有一种方法可以在ng-view内容发生变化时自动清除缓存:

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

如果你谈论的是用于模板缓存而不需要重新加载整个页面的缓存,那么你可以通过如下方式清空它:

.controller('mainCtrl', function($scope, $templateCache) {
  $scope.clearCache = function() { 
    $templateCache.removeAll();
  }
});

在标记中:

<巴顿ngk -click=“clearCache()”>清廉缓存</按钮>

并按此按钮清除缓存。

Firefox(33.1.1)使用Firebug(22.0.6)的解决方案

工具> Web-Tools > Firebug > Firebug。 在Firebug视图中转到“Net”视图。 一个下拉菜单符号将出现在“Net”(视图的标题)旁边。 从下拉菜单中选择“禁用浏览器缓存”。

这是Chrome的另一个选项。

按F12打开开发人员工具。然后资源>缓存存储>刷新缓存。

我喜欢这个选项,因为我不需要像其他答案那样禁用缓存。

我发现HTTP拦截器方法工作得非常好,并允许额外的灵活性和控制。此外,您可以为每个产品版本使用一个发布散列作为buster变量来缓存bust。

下面是使用Date的dev缓存破坏方法。

app.factory('cachebustInjector', function(conf) {   
    var cachebustInjector = {
        request: function(config) {    
            // new timestamp will be appended to each new partial .html request to prevent caching in a dev environment               
            var buster = new Date().getTime();

            if (config.url.indexOf('static/angular_templates') > -1) {
                config.url += ['?v=', buster].join('');
            }
            return config;
        }
    };
    return cachebustInjector;
});

app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push('cachebustInjector');
}]);