1
votes

onChange () doit correspondre au dernier alphabet tapé, pas à la ligne entière à chaque fois

Explication: J'utilise la fonction onChange pour savoir si quelqu'un tape @

Problème: Au fur et à mesure que je tape, il continue à vérifier le ligne entière à chaque fois, ce qui rend la frappe lente. Je souhaite modifier mon code pour qu'il ne vérifie que le dernier alphabet saisi.

Mon code:

home.html code>

onChange(eve)
{
if(eve.match(/@/g).length > 0)

home.ts

<ion-textarea #chat [(ngModel)]="tag" rows="1" cols="10" placeholder="Type your message..." (ngModelChange)='onChange($event)'></ion-textarea>

Cela rend l'expérience de frappe lente car elle vérifie la ligne entière à chaque fois, Je veux qu'il ne vérifie que le dernier alphabet saisi .


1 commentaires

Je doute vraiment que "comparer la ligne entière" et "comparer un seul caractère" fasse une différence notable en termes de performances. La raison de la «lenteur» se trouve probablement ailleurs.


3 Réponses :


0
votes

vous pouvez essayer ceci pour trouver les derniers alphabets.

onChange(eve) {   
  eve = eve.split('')[eve.length-1] 
  if(eve.match(/@/g).length > 0) 
  ...
}


0 commentaires

1
votes

Vous pouvez utiliser l'événement keydown:

if(eve.slice(-1) === '@') {}

Ensuite, vous pouvez le gérer comme ceci:

onKeydown(event) {
  if(event.key === "@")
  {  
    // your code
  }
}

Mais si vous souhaitez simplement vérifiez le dernier caractère de votre chaîne pour onChange, vous pouvez le faire de cette façon:

<input (keydown)="onKeydown($event)">


0 commentaires

1
votes

Essayez comme ceci:

Modèle:

onType(event) {
    if (event.key == '@') {
      console.log("@ typed")
    }
  }

Typographie:

<ion-textarea #chat [(ngModel)]="tag" rows="1" cols="10" placeholder="Type your message..." (keydown)="onType($event)"></ion-textarea>

Démo de travail


1 commentaires

merci beaucoup, juste coincé dans un autre problème, si possible, aidez-moi - stackoverflow.com/questions/57970245/...