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?)
小智 14
您可以location.reload()
不使用forceReload标志使用。只是不赞成使用,因为它不在规范中:https : //www.w3.org/TR/html50/browsers.html#dom-location-reload
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()
将解决您的问题。
小智 9
由于window.location.reload(true)
已被弃用。您可以使用:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
祝你好运 !
归档时间: |
|
查看次数: |
7747 次 |
最近记录: |