清除Angular中的浏览器缓存

时间:2019-04-04 13:21:37

标签: angular browser browser-cache cache-control

我经常更新的Angular应用程序有问题。

我想避免浏览器缓存,我正在尝试几种替代方法,但是它们都不起作用。

第一件事是,我很难测试该解决方案是否有效,因为当我上载新版本时,有时我看到它而不必执行其他操作,而不必刷新页面,而有时候我需要打开控制台并强制刷新清空缓存。

我试图在请求标头中包括Cache-Control:no-cache,如您在图像中所见,但这对我不起作用。

enter image description here

我也尝试过,放入app.component.ts

templateUrl: './app.component.html? v1'

正如我在some answers中所见,但都没有。

事实是我很绝望,因为当我给出我认为可行的东西时,当我与老板核对时,他不会刷新它:-(,而且坏的是,正如我所说的,我不知道如何真正检查一下,每次我进入网络时,服务器都会要求提供最新版本。

谢谢您的帮助

5 个答案:

答案 0 :(得分:1)

我也每天更新我的应用程序,我用它来通知用户应用程序已过时并请求刷新页面。

constructor(
    private swUpdate: SwUpdate,){

    public checkForUpdates(): void {
    this.updateSubscription = this.swUpdate.available.subscribe(event => this.promptUser());

    if (this.swUpdate.isEnabled) {
      // Required to enable updates on Windows and ios.
      this.swUpdate.activateUpdate();
      interval(300000).subscribe(() => {
        this.swUpdate.checkForUpdate().then(() => {
         console.log('checked for updates');
        });
      });
    }}

    // Important: on Safari (ios) Heroku doesn't auto redirect links to their-
    //https which allows the installation of the pwa like usual
    // but it deactivates the swUpdate. So make sure to open your pwa on safari
    //like so: https://example.com then (install/add to home)
    
      }

      promptUser(): void {
        this.swUpdate.activateUpdate().then(() => {
          const snack = this.snackbar.open('A New Update Is Available Click To 
          Reload', 'Reload');
          snack
            .onAction()
            .subscribe(() => {
              window.location.reload();
            })

  
 

       });
      }

答案 1 :(得分:0)

使用ng build构建应用程序时,应使用以下标志:

--outputHashing=all

这是为了启用缓存清除。这样会将哈希添加到每个生成的文件中,这样,每当您将新版本上传到服务器时,浏览器都将被迫加载最新版本。

因此,一种方法是运行以下代码:

ng build --prod --outputHashing=all

您可能会在here上阅读有关构建选项标志的更多信息。

如果您不希望在运行ng build时附加标志,则应在您的配置文件中的angular.json文件中进行设置。

"configurations": {
  "production": {
    "optimization": true,
    "outputHashing": "all",
     .
     .
     .
  }
}

答案 2 :(得分:0)

尝试location.reload(true);

根据w3c description

  

默认情况下,reload()方法从高速缓存中重新加载页面,但是您可以通过将forceGet参数设置为true来强制它从服务器重新加载页面:location.reload(true)。

答案 3 :(得分:0)

您可以使用以下命令强制重新加载页面:

window.location.replace('/path');

答案 4 :(得分:-1)

尝试单击检查,然后在刷新图标上单击鼠标右键,您将看到选项为空的缓存并对其进行硬重载