dedlfix: onkey down event handler

Beitrag lesen

Tach!

Leider habe das Ganze mit Angular am Start, und hier ist eine Doppel-Bindung zwischen dem Input und der Varíablen möglich und vorhanden.

Übrigen dieser Code klappt, bis auf das Autorepeat:

window.addEventListener('keyup', (event:KeyboardEvent )=>
{this.keyValue = event.key;
  if (parseInt( this.keyValue) >=  0 && parseInt( this.keyValue) <= 9 )
      { /*Eingabe OK*/ }
  else 
      {this.A = this.A.replace( event.key,"");} // Löscht das letzte Eingeabezeichen.
}

Sich an das window-Objekt zu hängen ist eigentlich nicht der Angular-Weg. Sollen wirklich nach Aufruf dieses Codes in der gesamten Anwendung Tastendrucke gefiltert werden? Falls das nur auf bestimmte Input-Elemente angewendet werden soll, ist der Einsatz einer Directive besser.

@Directive({
    selector: '[input-restriction]'
})
export class InputRestriction {
    constructor(private element: ElementRef) {}

    @HostListener('keydown', ['$event'])
    onKeyDown(event: KeyboardEvent) {
        if (event.key == 'a') {
            event.preventDefault();
        }
    }
}

Anwendungsbeispiel:

@Component({
    selector: 'test',
    templateUrl: './test.component.html'
})
export class TestComponent {
    formControl: FormControl;

    constructor() {
        this.formControl = new FormControl('');
        this.formControl.valueChanges.subscribe(console.log);
    }
}

Ausschnitt aus test.component.html:

    <label>No-a's Arc
        <input [formControl]="formControl" input-restriction>
    </label>

Die InputDirective filtert derzeit alle a aus. Sie ist ausbaufähig, zum Beispiel, dass man Parameter übergeben kann, was gefiltert werden soll.

dedlfix.