location.reload(true)已弃用

Dil*_*age 19 javascript tslint angular

我知道重新加载Angular单页应用程序并不理想,但是有一个地方需要重新加载整个应用程序。TSLint说不建议使用重装。还有其他选择吗?

Mar*_*der 36

由于该forceReload参数已被弃用,正如 3 个人已经提到的,它也已经被一些浏览器忽略了。

location.reload();如果您想执行强制重新加载(如使用Ctrl+完成F5)以便从服务器而不是浏览器缓存重新加载所有资源,则使用 only不是解决方案。

这个问题的解决方案是,执行POST对当前位置的请求,因为这总是会使浏览器重新加载所有内容。

location.reload()只是执行一个GET请求。

于是,我来到了解决办法将一个空的形式对角应用与method="POST"action="https://example.org/",然后提交从代码隐藏表单想要当。

模板:

<form [action]="myAppURL" method="POST" #refreshForm></form>
Run Code Online (Sandbox Code Playgroud)

代码隐藏/组件:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

我想这也可以以更非hacky的方式完成。我正在调查......(可能是HttpClient?)

  • 我收到“无法发布/” (4认同)

小智 14

您可以location.reload()不使用forceReload标志使用。只是不赞成使用,因为它不在规范中:https : //www.w3.org/TR/html50/browsers.html#dom-location-reload

  • 如果我想强制重载怎么办? (39认同)
  • 现在如何强制完全重新加载? (2认同)

Mat*_*our 11

如果查看“位置”的接口定义,将看到以下内容:

    /**
     * Reloads the current page.
     */
    reload(): void;
    /** @deprecated */
    reload(forcedReload: boolean): void;
Run Code Online (Sandbox Code Playgroud)

使用location.reload()是有效的语法。仅弃用了带有forceReload的重载。

在您的情况下,更改location.reload(true)location.reload()将解决您的问题。


Cha*_*nka 9

location.reload(true)更改为location.reload()有效。forceReload 是不推荐使用的。


小智 9

由于window.location.reload(true)已被弃用。您可以使用:

window.location.href = window.location.href,

强制重新加载并清除缓存。

  • 比这更好的是,使用 window.location.replace(window.location.href) ——这不会像简单的赋值那样在浏览器历史记录中添加条目。 (7认同)

Jun*_*hou 8

根据 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

祝你好运 !