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

在我的HTML页面,我有:

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

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

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

有什么解决办法吗?


当前回答

这是Chrome的另一个选项。

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

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

其他回答

正如在其他答案中提到的,这里和这里,缓存可以通过使用:

$templateCache.removeAll();

然而,正如gateatigrado在评论中所建议的那样,这只在html模板没有任何缓存头的情况下才会起作用。

这对我来说是可行的:

角:

app.run(['$templateCache', function ( $templateCache ) {
    $templateCache.removeAll(); }]);

您可能会以各种方式添加缓存头,但这里有几个解决方案适合我。

如果使用IIS,请将此添加到web.config中:

<location path="scripts/app/views">
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="DisableCache" />
    </staticContent>
  </system.webServer>
</location>

如果使用Nginx,你可以添加到你的配置:

location ^~ /scripts/app/views/ {
    expires -1;   
}

Edit

我刚刚意识到这个问题提到了开发机器,但希望这仍然可以帮助到一些人……

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

.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();
   });
});

没有解决方案可以防止浏览器/代理缓存,因为您无法控制它。

另一种方式,强制新鲜内容给您的用户它重命名HTML文件!就像https://www.npmjs.com/package/grunt-filerev对资产所做的那样。

这是Chrome的另一个选项。

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

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