javascript location.reload(true)已弃用

ghhaqwfi  于 2023-04-28  发布在  Java
关注(0)|答案(8)|浏览(223)

我知道重新加载Angular单页应用程序并不理想。但是,有一个地方,我需要重新加载完整的应用程序。
TSLint表示reload已弃用。
还有其他选择吗?

oipij1gg

oipij1gg1#

您可以在不使用forceReload标志的情况下使用location.reload()。这只是不推荐使用,因为它不在规范中: www.example.com

mpgws1up

mpgws1up2#

如果查看Location的接口定义,您将看到以下内容:

/**
  * Reloads the current page.
  */
reload(): void;
/** @deprecated */
reload(forcedReload: boolean): void;

使用location.reload()是有效的语法。只有强制重新加载才被弃用。
在您的情况下,将location.reload(true)更改为location.reload()以解决问题。

fbcarpbf

fbcarpbf3#

由于forceReload参数已被弃用,正如3个人已经提到的那样,它也已经被一些浏览器忽略。
如果您想执行强制重新加载(如使用e.例如,Ctrl + F5),以便从服务器而不是从浏览器缓存重新加载所有资源。
这个问题的解决方案是,执行一个POST请求到当前位置,因为这总是使浏览器重新加载所有内容。
location.reload()只执行GET请求。
因此,我来到了一个变通方案,在Angular应用程序上放置一个空表单,并使用method="POST"action="https://example.org/",然后在需要时从代码隐藏提交该表单。
模板:

<form [action]="myAppURL" method="POST" #refreshForm></form>

代码隐藏/组件:

import { Component, OnInit, ViewChild } from '@angular/core';

@Component({
  // bla bla bla Mr. Freeman
})
export class FooComponent {
  @ViewChild('refreshForm', { static: false }) refreshForm;

  forceReload() {
    this.refreshForm.nativeElement.submit();
  }
}

我想这也可以用一种更不黑客的方式来完成。我在调查。..(可能是HttpClient?)

f3temu5u

f3temu5u4#

根据Martin Schneider的回答,你可以创建一个函数,然后只需调用它

forceReload() {
    if(environment.production) {
        const form = document.createElement('form');
        form.method = "POST";
        form.action = location.href;
        document.body.appendChild(form);
        form.submit();
    } else {
        window.location.reload();
    }
}

祝你好运!😉

vwhgwdsa

vwhgwdsa5#

因为window.location.reload(true)已被弃用。您可以用途:
window.location.href = window.location.href
强制重新加载并清除该高速缓存。

l3zydbqr

l3zydbqr6#

更改**位置。reload(true)位置。reload()**工作。而这一点,是一个被抛弃的人。

tkqqtvp1

tkqqtvp17#

我创建了一个小包,以便有一个解决方案来清理该高速缓存并在必要时重新加载页面:https://www.npmjs.com/package/clear-cache
clearCache()clearCache(false),当您只想清除缓存而不想重新加载页面时。

ctehm74n

ctehm74n8#

我认为刷新页面(不仅仅是重新加载)的最好和最有效的方法是使用一个带有method=“post”的表单,一个空的操作和一个提交按钮,因为“post”请求永远不会被缓存。简单而有效,它甚至可以在没有JavaScript的情况下工作!

<form action="" method="post">
    <button type="Submit">Refresh</button>
</form>

如果你需要通过编程来实现,你可以用CSS隐藏按钮,用JavaScript触发按钮中的点击动作。
感谢@Martin Schneider的想法。

相关问题