【发布时间】:2016-08-13 13:34:02
【问题描述】:
我有一个基于 angularjs 的 Web 应用程序,其中一些功能部署给了我需要隐藏的用户。我添加了隐藏它的代码,并成功验证了控件在适当的时候被隐藏了,但是仍然有用户拥有旧版本的文件并且可以执行不需要的活动。有没有办法可以从服务器控制视图文件在客户端刷新? (测试人员能够清除他们的缓存,但这对现场用户来说是一种负担)
谢谢! 斯科特
【问题讨论】:
我有一个基于 angularjs 的 Web 应用程序,其中一些功能部署给了我需要隐藏的用户。我添加了隐藏它的代码,并成功验证了控件在适当的时候被隐藏了,但是仍然有用户拥有旧版本的文件并且可以执行不需要的活动。有没有办法可以从服务器控制视图文件在客户端刷新? (测试人员能够清除他们的缓存,但这对现场用户来说是一种负担)
谢谢! 斯科特
【问题讨论】:
处理此问题的一种方法是对文件进行版本控制。例如,您的index.html 中的以下行
<script src="abc.js" />
可以改写为
<script src="abc.js?v1" />
v1 是当前文件版本,当abc.js 发生更改时,应针对应用程序的每次部署进行更改。
由于index.html(初始页面)是从服务器获取的,对abc.js 的更新现在将反映在您的所有客户端上。
这需要在大型应用程序中实现自动化。您可以为此使用 Grunt。您可以参考 StackOverflow 上的以下答案来自动执行此操作:
https://stackoverflow.com/a/20446748/802651
更新
HTML 视图/模板使用 AngularJS 中的 $templateCache 进行缓存。基本上,当您第一次请求模板时,浏览器会从服务器请求模板并将其放入模板缓存中。对同一模板的任何后续请求都由模板缓存提供。
如果您不希望这些被缓存,您可以在app.run 块中侦听$routeChangeStart 事件以删除特定模板。
app.run(function($rootScope, $templateCache) {
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (typeof(current) !== 'undefined'){
$templateCache.remove(current.templateUrl);
}
});
});
参考:http://opensourcesoftwareandme.blogspot.in/2014/02/safely-prevent-template-caching-in-angularjs.html
【讨论】: