我正在打开一个模式对话框,其中包含以下内容:
var modalInstance = $modal.open({
animation: false,
templateUrl: '../templates/ResponseModal.html',
controller: 'ModalResponseCtrl',
size: 'lg',
resolve: {
response: function () {
return selResponse;
},
cmt: function () {
return cmt;
}
}
});
一切都正常运作。但是,如果我更改服务器上的ResponseModal.html
,浏览器永远不会重新读取该文件。浏览器控制台不显示尝试读取它,甚至检查它是否已更改。不知何故,ResponseModal.html
文件的旧副本正在缓存在内存中,我无法弄清楚如何清除它并强制它再次读取。我通常使用“shift-refresh”强制浏览器重新获取所有部分 - 但这不适用于此。完全关闭浏览器并重新启动它不会清除缓存。删除所有历史作品,但这是极其重要的。
是否有更简单的方法来说服$ modal机制忘记旧的缓存副本,并从服务器重新读取新的?
答案 0 :(得分:0)
jbrown的评论是绝对正确的(在Chrome中它更容易,只需打开检查器并在打开时自动禁用缓存),但有时您不希望这些.html文件缓存在ALL,因为它们可以可能会在生产环境中改变(或生成)。
假设你正在使用Apache,我在这个用例中发现使用.htaccess可以很好地禁用某些视图文件的缓存。说实话,在今天它没有提供导致服务器负载的.html文件,它是动态数据驱动的东西。这是使用.htaccess
在简单的.html部分上禁用(几乎全部)缓存的简单方法ExpiresActive On
ExpiresByType text/html "access plus 1 minute"
这可以阻止洪水,但也确保它会在合理的时间内要求提供新版本的页面。它本质上是有缺陷的,因为它涉及时间因素,但这在我使用类似用例的经验中运作良好。
答案 1 :(得分:0)
只要您在Angular中看到/使用templateUrl
,请考虑$templateCache
。第一次下载HTML模板后,它将存储在$templateCache
服务中,并且不会通过正常的应用程序交互再次更新。
根据您的Expires
和Cache-Control
标头,强制重新加载可能无效。最好的办法是在浏览器的调试窗口打开时禁用浏览器的缓存,如上所示。
了解尽管您仍然应该开发测试您的应用程序,因为普通用户会使用您的应用程序,而不是依赖刷新的缓存。