代码之家  ›  专栏  ›  技术社区  ›  Sletheren

Angular从ngModel中获取类型化字符并在输入中替换它

  •  0
  • Sletheren  · 技术社区  · 6 年前

    如何获取新类型的字符(而不是ngModel的整个新值),然后对其应用逻辑,然后为ngModel返回新值?

    例子: 比方说,当用户在输入中键入我们想要获取的 新建角色 然后他键入并将其更改为某物,并将其附加到ngModel的前一个值中。尝试 keypress onModelChange 但似乎不起作用

    <ion-textarea #chat_input
         (ngModelChange)="modelChanged($event)"
         placeholder="Text Input"
         [ngModel]="editorMsg"
         (keyup.enter)="sendMsg()"
         (ionFocus)="onFocus()">
    </ion-textarea>
    

    我的方法是:

    modelChanged(e){
            // e is the new value of editorMsg and not the new typed character, if I get the new character I can do
    this.editorMsg+=e;
    }
    

    但我只从 modelChange 如何仅获取新键入的字符?

    3 回复  |  直到 6 年前
        1
  •  4
  •   Hugo Noro    6 年前

    我相信你要找的是 keyup 事件

    你可以有这样的

    <input (keyup)="onKey($event)">
    

    然后在组件中

    onKey(event: any) { 
        console.log(event.key)
    }
    

    这里重要的一点是使用 event.key 而不是 event.target.value . 如果使用后一个,它将始终为您提供输入值,而不是输入键

    您可以获得有关所需内容的更多信息 here ,我从那里得到了相关的信息

        2
  •  1
  •   callback    6 年前

    您可以执行以下操作:

    modelChanged(e){
      let lastChar;
      if (e.length) {
          lastChar = e[e.length -1]; // this gets the last character of the srting..
         // do you logic with lastChar..
       }
    }
    
        3
  •  0
  •   Noémi Salaün    6 年前

    它使用 (ngModelChange) . 看到这个了吗 StackBlitz

    组成部分html

    <input [ngModel]="name" (keypress)="onKeypress($event)">
    

    组成部分ts

    export class AppComponent  {
      name = 'try me';
    
      onKeypress(event: KeyboardEvent) {
         console.log(event);
         // Do what you want...
         this.name = event.key;
         event.preventDefault();
      }
    }