我有一个基于angularjs的Web应用程序,其中部署了一些我需要隐藏的功能。我添加了代码来隐藏它并成功验证控件是否在适当时隐藏,但仍然有用户拥有旧版本的文件并可以执行不需要的活动。有没有办法可以从服务器控制视图文件在客户端刷新? (测试人员能够清除他们的缓存,但这对现场用户来说是一种负担)
谢谢! 斯科特
答案 0 :(得分:4)
处理此问题的一种方法是对文件进行版本控制。例如,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
更新
使用AngularJS中的$ templateCache缓存HTML视图/模板。基本上,当您第一次请求模板时,浏览器会从服务器请求模板并将其放入模板缓存中。对模板缓存提供对同一模板的任何后续请求。
如果您不希望缓存这些内容,可以在$routeChangeStart
块内收听app.run
事件以删除特定模板。
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