Reload (true)不推荐使用

我知道这是不理想的重新加载一个角单页应用程序。然而,有一个地方,我需要重新加载完整的应用程序。

TSLint 表示不推荐重新加载。

还有别的选择吗?

75382 次浏览

可以使用没有 forcReload 标志的 location.reload()。 因为它不在规范中,所以不被推荐使用。 < a href = “ https://www.w3.org/TR/html50/Browsers.html # dom-location-reload”rel = “ norefrer”> https://www.w3.org/tr/html50/browsers.html#dom-location-reload

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

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

使用 location.reload()是有效的语法。只有使用 forcedRelload 的重新加载是不推荐的。

In your case changing location.reload(true) to location.reload() to resolve your issue.

Reload (true)改为 Location.reload ()是可行的。 ForcedRelload 是不推荐使用的。

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

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

这个问题的解决方案是,执行一个 POST请求到当前位置,因为这总是使浏览器重新加载一切。

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

因此,我来到工作区放置一个与 method="POST"action="https://example.org/"的 Angular 应用程序的空表单,然后从代码后面提交表单时想要的。

模板:

<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,也许?)

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

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

如果需要以编程方式执行,只需使用 CSS 隐藏按钮,并使用 JavaScript 触发按钮中的单击操作。

感谢@Martin Schneider 的创意。

我创建了一个小包,以便有一个解决方案来清理缓存并在必要时重新加载页面: https://www.npmjs.com/package/clear-cache

当您只想清除缓存但不想重新加载页时,可以使用 clearCache()clearCache(false)

Since window.location.reload(true) has been deprecated. You can use:

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

重新加载并清除缓存。

根据 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();
}
}

祝你好运!