我想在用户关闭窗口之前保存更改,但在退出选项卡时它不起作用。 我正在使用路由器的canDeactivate方法,它在我用F5刷新页面时起作用,但是当我关闭标签数据时并未保存。这里是我的组件我canDeactivate功能:Angular 2在用户关闭窗口之前调用http
@HostListener('window:beforeunload')
canDeactivate(): Observable<boolean> | boolean {
let subject = new Subject<boolean>();
let observable = subject.asObservable();
this.service.save(this.data).then(() => {
subject.next(true);
});
return observable.first();
}
我已经尝试过这也:
@HostListener('window:beforeunload')
canDeactivate(): Observable<boolean> | boolean {
let xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
xmlhttp.withCredentials = false;
xmlhttp.open("PUT", "http://localhost:8080/rest/api");
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.setRequestHeader("Accept", "application/json");
xmlhttp.send(this.data);
return false;
}
该解决方案让他想退出与否,我不想让他取消我的HTTP调用 –
有没有选项关闭之前发送一个异步HTTP调用到服务器,并等待它的用户决定窗户。您只能通知用户他有未保存的更改。 – cyrix
@MattewEon我不太确定如果这是可能的这是一个浏览器的限制,但我搜索所以你可以检查这个[链接](https://stackoverflow.com/questions/38999842/angular-2-execute-code-when -closing-window)。不太确定这是否有助于解决问题 –