如何清除缓存的 angularjs 文件

Sco*_*000 1 html caching angularjs

我有一个基于 angularjs 的 Web 应用程序,其中一些功能已部署给我需要隐藏的用户。我已经添加了隐藏它的代码,并成功验证了控件在适当的时候是隐藏的,但仍然有用户拥有旧版本的文件并且可以执行不需要的活动。有没有办法可以从服务器控制视图文件在客户端刷新?(测试人员能够清除他们的缓存,但这对现场用户来说是一种负担)

谢谢!斯科特

Ada*_*ady 5

处理此问题的一种方法是对文件进行版本控制。例如,您的以下行index.html

<script src="abc.js" />
Run Code Online (Sandbox Code Playgroud)

可以改写为

<script src="abc.js?v1" />
Run Code Online (Sandbox Code Playgroud)

v1是当前文件版本,并且应该在更改时针对应用程序的每个部署进行abc.js更改。

由于index.html(初始页面)是从服务器获得的,更新到abc.js现在将反映在您的所有客户端上。

这需要在大型应用程序中实现自动化。您可以为此使用 Grunt。您可以参考 StackOverflow 上的以下答案来自动执行此操作:

/sf/answers/1431272391/

更新
HTML 视图/模板在 AngularJS 中使用 $templateCache 进行缓存。基本上,当您第一次请求模板时,浏览器会从服务器请求模板并将其放入模板缓存中。对同一模板的任何后续请求都由模板缓存提供。

如果您不想缓存这些,您可以监听块$routeChangeStart内的事件app.run以删除特定模板。

app.run(function($rootScope, $templateCache) {
    $rootScope.$on('$routeChangeStart', function(event, next, current) {
        if (typeof(current) !== 'undefined'){
            $templateCache.remove(current.templateUrl);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

参考:http : //opensourcesoftwareandme.blogspot.in/2014/02/safely-prevent-template-caching-in-angularjs.html