我知道这是不理想的重新加载一个角单页应用程序。然而,有一个地方,我需要重新加载完整的应用程序。
TSLint 表示不推荐重新加载。
还有别的选择吗?
可以使用没有 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.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.
location.reload(true)
将 Reload (true)改为 Location.reload ()是可行的。 ForcedRelload 是不推荐使用的。
由于 forceReload参数已被弃用,正如3个人已经提到的那样,它也已经被一些浏览器忽略了。
forceReload
如果您想执行强制重新加载(例如 Ctrl + F5) ,以便从服务器而不是从浏览器缓存重新加载所有资源,那么仅使用 location.reload();不是一种解决方案。
location.reload();
这个问题的解决方案是,执行一个 POST请求到当前位置,因为这总是使浏览器重新加载一切。
POST
location.reload()只执行 GET请求。
GET
因此,我来到工作区放置一个与 method="POST"和 action="https://example.org/"的 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,也许?)
我认为刷新(而不仅仅是重新加载)页面的最好和最有效的方法是使用一个带有 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)。
clearCache()
clearCache(false)
Since window.location.reload(true) has been deprecated. You can use:
window.location.reload(true)
window.location.href = window.location.href,
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(); } }
祝你好运!