Angular JS 缓存问题
来源:互联网 发布:废铁战士的时光机 知乎 编辑:程序博客网 时间:2024/06/07 11:23
问题描述:.net mvc ng 项目,每个component,html页面第一次加载后都会产生本地缓存,存储下来,导致新的页面改动不能及时刷新出来。
解决方案,.net项目中自带一个版本文件,需要自己发布项目时自己手动更改它,这里我把它在构建的时候自动增加这个version. 我们会写好一个.exe的file在build event中添加这个事件即可。然后就可以在项目中用这个版本号了。在js和html页面后面加这个参数?v=versionNumber即可解决。
“
.exe 的源代码如下:根据代码开发时间去生成唯一的版本
private static void Main(string[] args)
{
if (args.Length == 1)
{
string path = args[0];
string path2 = Path.Combine(path, “CommonAssemblyInfo.cs”);
if (File.Exists(path2))
{
string text = File.ReadAllText(path2);
Regex regex = new Regex(“\d+.\d+.\d+.\d+”, RegexOptions.IgnoreCase);
MatchCollection matchCollection = regex.Matches(text);
if (matchCollection.Count > 0)
{
string value = matchCollection[0].Value;
DateTime now = DateTime.Now;
string newValue = string.Format(“{0}.{1}.{2}.{3}”, new object[]
{
now.Year - 2014,
now.Month,
now.Day,
now.Ticks.ToString().PadLeft(4, ‘0’).Substring(now.Ticks.ToString().Length - 4, 4)
});
text = text.Replace(value, newValue);
File.WriteAllText(path2, text);
}
}
}
}
用的时候先在mvc页面中导入变量。
c#code拿到变量值。
public static class SystemInformationFactory
{
public static string AssemblyFileVersion { get; private set; }
static SystemInformationFactory() { AssemblyFileVersion = GetAssemblyFileVersion(); } private static string GetAssemblyFileVersion() { var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false); if (attributes.Length == 0) { return string.Empty; } var fileInformation = attributes[0] as AssemblyFileVersionAttribute; if (fileInformation == null) { return string.Empty; } return fileInformation.Version; }}
页面引用变量
@{
string version = “?v=” + Acc.MvcApp.Helpers.SystemInformationFactory.AssemblyFileVersion;
string environment = SysParamFactory.GetSysParam(“Environment”)}
angular js systemjs.config.js配置中添加js version。
第一种方法可以在引进packages 时添加。
// packages tells the System loader how to load when no filename and/or no extension packages: { app: { main: './Main', defaultExtension: 'js' + DefaultValues.Version }, rxjs: { defaultExtension: 'js' + DefaultValues.Version }, primeng: { defaultExtension: 'js' + DefaultValues.Version } }
也可以在’system.locate’ 中返回这个js。
(function (global) {SystemJS.defaultJSExtensions = true;//var syslocate = System.locate;//System.locate = function (local) {// var system = this;// return Promise.resolve(syslocate.call(this, local).then(function (address) {// return address + DefaultValues.Version;// }));//};
html 页面添加版本。 这里用一个静态方法,在每个component 引入页面时候, 添加这个版本号。
在 service 声明这个变量,然后在静态类中添加这个静态方法返回即可。
declare var DefaultValues: any;public static getURLVersion(url: string): string { return url + DefaultValues.Version;}
运行项目可以在dubug环境中看到结果。
- Angular JS 缓存问题
- angular.js路由页面缓存问题
- Angular.js压缩问题
- 使用angular js问题
- js缓存问题
- css,js缓存问题
- css、js缓存问题
- js缓存问题
- localStorage本地缓存项目js文件(例如jquery/angular)
- angular.js 路由及页面传参与缓存
- angular js 使用$location问题整理
- Angular JS 文件上传按钮覆盖问题
- 十个由浅入深的Angular.js面试问题
- 十个由浅入深的Angular.js面试问题
- Angularjs -angular-translate.js 闪烁问题
- 十个由浅入深的Angular.js问题
- Angular JS
- Angular js
- 获取网络文件HttpUrl
- 1023. 组个最小数 (20)——C语言
- Maven搭建SSM框架的pom.xml文件
- Oracle 11g用户修改密码及加锁解锁
- Cubes UVA
- Angular JS 缓存问题
- 心跳机制详解
- 二分查找
- Mysql解决中文乱码的问题
- 编译器常量、运行时常量以及静态块执行
- iOS11.1也不安全? 新零日WiFi漏洞被发现
- WEB测试和Aepp测试区别
- 多线程下载示例
- Maze&&Mole