[Angular] 键盘监听事件需要鼠标点击一下窗口才能监听到如何解决?

在模板页面通过onKeyDown或者HostListener设置键盘监听事件,当页面刷新时由于页面没有被激活导致无法监听到键盘事件,必须在页面上点一下以激活页面才能监听到键盘按下事件
处理方法: 通过 renderer2.listen 方法代替onKeyDown监听
实现:
1) 导入 Renderer2 和 NgZone
import {  Component,  OnDestroy,  OnInit,  Renderer2, NgZone  } from "@angular/core";

2) 声明 Listener 保存监听事件,当页面销毁时通过该引用注销监听
private keydownListener: () => void;

3) 在 ngInit 方法中注册监听
ngOnInit(): void {
      this.setKeydownListener();
      ...  
}

private setKeydownListener() {
   if(this.keydownListener == null) {
      t his.zone.runOutsideAngular(() => {
          this.keydownListener = this.renderer.listen(
             "document", "keydown", (e) => this.onKeydown(e));
      }) 
    }
}

private onKeydown(event: KeyboardEvent) {
    // do something
}

4) 在 destroy 方法中注销监听
ngOnDestroy() {
  this.removeKeydownListener();
}

private removeKeydownListener() {
  if(!!this.keydownListener) {
     this.keydownListener();
     this.keydownListener = null;
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值