javascript - 如何在关闭选项卡上实现 Angular 10 中的注销并防止刷新或通过鼠标或键重新加载
问题描述
import { Component, HostListener, Inject } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls:['./home.component.scss']
})
export class HomeComponent {
User: any;
isRefreshed = false;
@HostListener('window:beforeunload', ['$event'])
onBeforeUnload(event: Event) {
console.log('isrefreshed', this.isRefreshed);
if (!this.isRefreshed) {
this.User.logout();
}
}
constructor(@Inject('User') userProvider) {
this.User = userProvider;
window.addEventListener('keydown', event => {
console.log('Key Pressed ==>', event, this.isRefreshed);
if (event.key == 'r' || event.key == 'F5') this.isRefreshed = true;
});
}
}
- 我可以
logout
在关闭选项卡上。但是当重新加载或用鼠标刷新时它也会被注销。如何处理这些? - 我怎样才能让这些事件在整个应用程序中触发,而不仅仅是
Home
组件?
解决方案
不幸的是,关闭浏览器选项卡(窗口)或重新加载/刷新窗口之间没有区别——它们都注册为一个事件,即卸载该 DOM 窗口元素的内容。
有几种处理方法。这样做的一种方法是在根组件(通常命名为
AppComponent
)中绑定“beforeunload”事件,然后在那里响应该事件......由于它是根组件,因此它将是应用程序范围的。
推荐阅读
- spring-boot - spring boot restcontroller 测试返回 null
- angular - ng build 后排除 /assets 文件夹中的文件
- svg - 在 GIMP 中使用 svg 和外部字体
- angular - 将动态 FormGroup 值复制到 Angular [反应式表单] 中的数据类
- gitlab - 自定义 GitLab 通知电子邮件
- angular - 我有这个错误:错误TS2339:类型上不存在属性
- php - 如何将前端图像代理到后端图像?
- r - 在 R 中导入多张发票 (.PDF)。将它们从字符串转换为 tibble
- sql-server - 特殊字符(夏威夷 'Okina)导致奇怪的字符串行为
- reactjs - Redux Form onsubmit 调用 API