如何在TypeScript(Angular 4.2.2)中实现检测和警告用户是否开启大写锁定,并使用(或不使用)工具提示样式?也许可以使用一些keyup事件,或者像JS中的toUpperCase()一样。
编写指令并添加监听器。将其添加到组件的主包装 div 中,以便组件可以接收到 emits。一旦它接收到事件更改,就会触发与标签标记链接的属性状态。它将有助于使用 *ngIf 隐藏和显示,条件是您监听器的响应(通过 @Output 发送到组件)。
以下动态显示一条消息:
HTML:
<div (capsLock)="capsOn=$event">
<input type="text" >
<label *ngIf="capsOn">Caps Locked</label>
</div>
指令:
@Directive({ selector: '[capsLock]' })
export class TrackCapsDirective {
@Output('capsLock') capsLock = new EventEmitter<Boolean>();
@HostListener('window:keydown', ['$event'])
onKeyDown(event: KeyboardEvent): void {
const capsOn = event.getModifierState && event.getModifierState('CapsLock');
this.capsLock.emit(capsOn);
}
@HostListener('window:keyup', ['$event'])
onKeyUp(event: KeyboardEvent): void {
const capsOn = event.getModifierState && event.getModifierState('CapsLock');
this.capsLock.emit(capsOn);
}
}
import { Component, OnInit, HostListener } from '@angular/core';
export class LoginComponent implements OnInit {
constructor(){}
ngOnInit() {}
@HostListener('window:click', ['$event']) onClick(event){
if (event.getModifierState && event.getModifierState('CapsLock')) {
this.capslockOn = true;
} else {
this.capslockOn = false;
}
}
@HostListener('window:keydown', ['$event'])
onKeyDown(event){
if (event.getModifierState && event.getModifierState('CapsLock')) {
this.capslockOn = true;
} else {
this.capslockOn = false;
}
}
@HostListener('window:keyup', ['$event'])
onKeyUp(event){
if (event.getModifierState && event.getModifierState('CapsLock')) {
this.capslockOn = true;
} else {
this.capslockOn = false;
}
}
}
我认为Angular无法直接实现这个功能(AngularJS可以)。
不过有一些库可以实现,建议查看capsLock(NPM, GitHub)
你可以使用observable来检查大写锁定是否启用,然后进行自定义操作。
capsLock.observe(function (result) {
// Do stuff
});
@HostListener('window:click', ['$event'])
@HostListener('window:keydown', ['$event'])
@HostListener('window:keyup', ['$event'])
onCapsCheck(event: MouseEvent | KeyboardEvent) {
this.capsOn = !!(event.getModifierState && event.getModifierState('CapsLock'));
}