我遇到的问题是部分文件(* .html)被浏览器缓存了。虽然开发它不是一个大问题,但是一旦我部署了应用程序,客户端就会看到旧页面,直到他们清除缓存或点击ctrl F5 我已经尝试指定元标记(CACHE-CONTROL,EXPIRES)但仍然看到这些页面被拾取 来自chrome的开发者工具中的缓存(也许我在这里遗漏了什么?)。
我打算尝试在网址前添加一些随机数,如
<div ng-include src="'views/test.html?i=1000'"></div>
但是遇到了https://groups.google.com/forum/#!topic/angular/9gORRowzP2M,詹姆斯在那里正确地说这种方式会一遍又一遍地填充缓存部分。
我在某处读过,从服务器设置标题中的元标记会更好,但我不知道该怎么做?我想在某种方式在http拦截器中做这件事?也许不知何故在这个httpinterceptor的请求或响应中添加元标记? https://gist.github.com/gnomeontherun/5678505
任何想法如何做到这一点?或者,如果它的好/坏主意?或者其他任何阻止浏览器缓存部分页面的方法?
答案 0 :(得分:1)
为了防止缓存,在许多情况下,不能仅从客户端完全关闭它。您必须以正确的方式配置服务器,以便生成正确的HTTP标头。
但是在$templateCache的帮助下,您可以将单个文件的html部分移动到index.html文件中的脚本标记中。这也将减少您的应用程序需要进行的AJAX调用次数。 使用index.html中的模板,您只需要确保index.html没有被缓存。
以下是对它的讨论: Is there a way to make AngularJS load partials in the beginning and not at when needed?
答案 1 :(得分:0)
如果其他人遇到同样的问题,我最后添加了一个httphandler并添加了&#34; Cache-Control&#34;和&#34;到期&#34;在响应标题
中public void ProcessRequest(HttpContext context)
{
var partial = context.Request.FilePath;
var filepath = context.Server.MapPath("~/" + partial);
context.Response.AddHeader("Content-Disposition", "filename=\"" + Path.GetFileName(filepath) + "\"");
// To make sure partial html pages are not cached by browser(s)
context.Response.AddHeader("Cache-Control", "No-Cache");
context.Response.AddHeader("Expires", "0");
context.Response.ContentType = MimeTypesHelper.GetMimeType(filepath);
context.Response.WriteFile(filepath);
}