我知道重新加载Angular单页应用程序并不理想。但是,有一个地方,我需要重新加载完整的应用程序。TSLint表示reload已弃用。还有其他选择吗?
oipij1gg1#
您可以在不使用forceReload标志的情况下使用location.reload()。这只是不推荐使用,因为它不在规范中: www.example.com
location.reload()
mpgws1up2#
如果查看Location的接口定义,您将看到以下内容:
/** * Reloads the current page. */ reload(): void; /** @deprecated */ reload(forcedReload: boolean): void;
使用location.reload()是有效的语法。只有强制重新加载才被弃用。在您的情况下,将location.reload(true)更改为location.reload()以解决问题。
location.reload(true)
fbcarpbf3#
由于forceReload参数已被弃用,正如3个人已经提到的那样,它也已经被一些浏览器忽略。如果您想执行强制重新加载(如使用e.例如,Ctrl + F5),以便从服务器而不是从浏览器缓存重新加载所有资源。这个问题的解决方案是,执行一个POST请求到当前位置,因为这总是使浏览器重新加载所有内容。location.reload()只执行GET请求。因此,我来到了一个变通方案,在Angular应用程序上放置一个空表单,并使用method="POST"和action="https://example.org/",然后在需要时从代码隐藏提交该表单。模板:
forceReload
POST
GET
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?)
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(); } }
祝你好运!😉
vwhgwdsa5#
因为window.location.reload(true)已被弃用。您可以用途:window.location.href = window.location.href,强制重新加载并清除该高速缓存。
window.location.reload(true)
window.location.href = window.location.href
l3zydbqr6#
更改**位置。reload(true)到位置。reload()**工作。而这一点,是一个被抛弃的人。
tkqqtvp17#
我创建了一个小包,以便有一个解决方案来清理该高速缓存并在必要时重新加载页面:https://www.npmjs.com/package/clear-cacheclearCache()或clearCache(false),当您只想清除缓存而不想重新加载页面时。
clearCache()
clearCache(false)
ctehm74n8#
我认为刷新页面(不仅仅是重新加载)的最好和最有效的方法是使用一个带有method=“post”的表单,一个空的操作和一个提交按钮,因为“post”请求永远不会被缓存。简单而有效,它甚至可以在没有JavaScript的情况下工作!
<form action="" method="post"> <button type="Submit">Refresh</button> </form>
如果你需要通过编程来实现,你可以用CSS隐藏按钮,用JavaScript触发按钮中的点击动作。感谢@Martin Schneider的想法。
8条答案
按热度按时间oipij1gg1#
您可以在不使用forceReload标志的情况下使用
location.reload()
。这只是不推荐使用,因为它不在规范中: www.example.commpgws1up2#
如果查看Location的接口定义,您将看到以下内容:
使用
location.reload()
是有效的语法。只有强制重新加载才被弃用。在您的情况下,将
location.reload(true)
更改为location.reload()
以解决问题。fbcarpbf3#
由于
forceReload
参数已被弃用,正如3个人已经提到的那样,它也已经被一些浏览器忽略。如果您想执行强制重新加载(如使用e.例如,Ctrl + F5),以便从服务器而不是从浏览器缓存重新加载所有资源。
这个问题的解决方案是,执行一个
POST
请求到当前位置,因为这总是使浏览器重新加载所有内容。location.reload()
只执行GET
请求。因此,我来到了一个变通方案,在Angular应用程序上放置一个空表单,并使用
method="POST"
和action="https://example.org/"
,然后在需要时从代码隐藏提交该表单。模板:
代码隐藏/组件:
我想这也可以用一种更不黑客的方式来完成。我在调查。..(可能是HttpClient?)
f3temu5u4#
根据Martin Schneider的回答,你可以创建一个函数,然后只需调用它
祝你好运!😉
vwhgwdsa5#
因为
window.location.reload(true)
已被弃用。您可以用途:window.location.href = window.location.href
,强制重新加载并清除该高速缓存。
l3zydbqr6#
更改**位置。reload(true)到位置。reload()**工作。而这一点,是一个被抛弃的人。
tkqqtvp17#
我创建了一个小包,以便有一个解决方案来清理该高速缓存并在必要时重新加载页面:https://www.npmjs.com/package/clear-cache
clearCache()
或clearCache(false)
,当您只想清除缓存而不想重新加载页面时。ctehm74n8#
我认为刷新页面(不仅仅是重新加载)的最好和最有效的方法是使用一个带有method=“post”的表单,一个空的操作和一个提交按钮,因为“post”请求永远不会被缓存。简单而有效,它甚至可以在没有JavaScript的情况下工作!
如果你需要通过编程来实现,你可以用CSS隐藏按钮,用JavaScript触发按钮中的点击动作。
感谢@Martin Schneider的想法。