如何在Angular 6应用程序中以编程方式清除缓存?

4

请问 - Angular是否有一种保证用户在访问网站时清除缓存的方式?

我有一个Angular应用程序,偶尔会推送更改,但不幸的是,用户除非在隐身模式下打开,否则无法看到这些更新。我该如何解决这个问题?


1
负责/运行 angular-material 项目的人甚至在他们自己的演示网站上都没有解决这个问题,所以我不太希望有广泛支持的解决方案。 - Roddy of the Frozen Peas
更改的性质是什么?代码更改还是数据更改? - Robert Harvey
1
一个解决方案是配置您的Web服务器(例如Apache)以永远不缓存index.html。每当部署新版本时,将版本号附加到所有文件名(例如main-1.2.1.js)。我相信angular-cli通过哈希文件名自动完成此操作。 - Sumama Waheed
当你使用 --prod 构建时,文件应该有附加的哈希值,这些哈希值应该触发对资源的新请求。因此,当您查看网络调试窗口时,如果这些文件相同,则应该有一个 http 304 未修改状态,如果它们是新的,则应该只有一个 200 状态,表示它们被重新获取了。 - Chris W.
1个回答

1
为了控制可能随时间而变化的特定文件,您可以向url添加一个虚假版本参数,并更改参数的值。
例如:<script src="http://wwww.xxxx.com/js/my-site-script.js?version=1"></script> 当参数的值被更改时,该资源的缓存将被清除。
对于测试,我发现检查器(至少在chrome / firefox中)中的网络选项卡中有一个禁用缓存的复选框很有用。当它被选中并且该选项卡是打开状态时,您可以加载页面并且它不会被缓存。当然,这只适用于您在开发过程中,而不是网站用户。
要以通用方式禁用文件缓存,请查看此问题以了解如何在Web浏览器中禁用缓存:如何在所有浏览器中控制网页缓存?

对我来说,这似乎是一个临时的解决方法,但如果它能解决问题,就用它吧。 - Xorifelse
@Xorifelse 可能是这样,但 WordPress 使用它。 - Juan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接