Welche Optionen gibt es für (Keyup) in Angular2?

82

Das Folgende funktioniert hervorragend, wenn die Eingabetaste losgelassen wird. Welche weiteren Optionen stehen keyupzusätzlich für zur Verfügung keyup.enter?

<input #inputstring (keyup.enter)="doSomething(inputstring.value)"/>
AlikElzin-Kilaka
quelle
Vielleicht könnte dir das einen Hinweis geben github.com/angular/angular/issues/523 , aber es ist ziemlich alt.
Eric Martinez

Antworten:

57

Dies sind die Optionen, die derzeit in den Tests dokumentiert sind: Strg, Umschalt, Eingabe und Escape. Dies sind einige gültige Beispiele für Schlüsselbindungen:

keydown.control.shift.enter
keydown.control.esc

Sie können dies hier verfolgen , solange keine offiziellen Dokumente vorhanden sind, diese sollten jedoch bald veröffentlicht werden.

Angular University
quelle
5
Wow, diese Antwort wurde gegeben, als Angular in seinem 20. Alpha war und es funktioniert noch heute.
JP Ten Berge
Verwandte Dokumentation angle.io/guide/user-input#key-event-filtering-with-keyenter
Lars Gyrup Brink Nielsen
23

Ich suchte nach einer Möglichkeit, mich an mehrere wichtige Ereignisse zu binden - insbesondere Umschalt + Eingabetaste -, konnte jedoch online keine guten Ressourcen finden. Aber nach dem Protokollieren der Keydown-Bindung

<textarea (keydown)=onKeydownEvent($event)></textarea>

Ich stellte fest, dass das Tastaturereignis alle Informationen lieferte, die ich zum Erkennen von Umschalt + Eingabetaste benötigte. Es stellt sich heraus, dass $eventein ziemlich detailliertes KeyboardEvent zurückgegeben wird .

onKeydownEvent(event: KeyboardEvent): void {
   if (event.keyCode === 13 && event.shiftKey) {
       // On 'Shift+Enter' do this...
   }
}

Es gibt auch Flags für CtrlKey, AltKey und MetaKey (dh Befehlstaste auf dem Mac).

KeyEventsPlugin, JQuery oder eine reine JS-Bindung sind nicht erforderlich.

Protalk
quelle
12

Habe heute das gleiche Problem getroffen.

Diese sind schlecht dokumentiert, ein offenes Problem besteht.

Einige für Keyup , wie Leerzeichen:

<input (keyup.space)="doSomething()">
<input (keyup.spacebar)="doSomething()">  

Einige für Keydown
(funktioniert möglicherweise auch für Keyup):

<input (keydown.enter)="...">
<input (keydown.a)="...">
<input (keydown.esc)="...">
<input (keydown.alt)="...">
<input (keydown.shift.esc)="...">
<input (keydown.shift.arrowdown)="...">
<input (keydown.f4)="...">

Alle oben genannten sind von unten Links:

https://github.com/angular/angular/issues/18870
https://github.com/angular/angular/issues/8273
https://github.com/angular/angular/blob/master/packages/platform- browser / src / dom / events / key_events.ts
https://alligator.io/angular/binding-keyup-keydown-events/

Manohar Reddy Poreddy
quelle
11

Sie können ein Keyup-Ereignis wie dieses hinzufügen

template: `
  <input (keyup)="onKey($event)">
  <p>{{values}}</p>
`

Codieren Sie in Component einige wie unten

export class KeyUpComponent_v1 {
  values = '';

  onKey(event:any) { // without type info
    this.values += event.target.value + ' | ';
  }
}
Md Ayub Ali Sarker
quelle
1
Dies funktioniert nicht für Zahlen. Das Keyup-Ereignis wird nicht ausgelöst, wenn ich Nummer in das Eingabefeld eingebe. Was können wir dafür tun?
Monica
2

Wenn Ihr keyup Ereignis außerhalb der ist CTRL, SHIFT, ENTERund ESCHalter, benutzen Sie einfach @Md Ayub Ali Sarker Leitfaden. Das einzige Keyup-Pseudo-Ereignis, das hier in den eckigen Dokumenten https://angular.io/docs/ts/latest/guide/user-input.html erwähnt wird, ist der ENTERSchlüssel. Es gibt noch keine Keyup-Pseudoereignisse für Zifferntasten und Alphabete.

Benny64
quelle
Entschuldigung, Robert. Ich hatte keine Probleme beim Navigieren zu Angular-Dokumenten über den Link. Es klappt.
Benny64
Ja, es funktioniert jetzt. Wahrscheinlich war das Problem auf meiner Seite. Es tut uns leid.
Robert
0

Das keyCodeist veraltet, Sie können keyEigenschaft in der verwendenKeyboardEvent

<textarea (keydown)=onKeydownEvent($event)></textarea>

Typoskript:

onKeydownEvent($event: KeyboardEvent){

    // you can use the following for checkig enter key pressed or not
    if ($event.key === 'Enter') {
      console.log($event.key); // Enter
    }


    if ($event.key === 'Enter' && event.shiftKey) {
           //This is 'Shift+Enter' 
    }
}
Siv
quelle
0

Eins wie bei Events

(keydown)="$event.keyCode != 32 ? $event:$event.preventDefault()"
Aniruddha Das
quelle