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 .
3 Réponses :
vous pouvez essayer ceci pour trouver les derniers alphabets.
onChange(eve) { eve = eve.split('')[eve.length-1] if(eve.match(/@/g).length > 0) ... }
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)">
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>
merci beaucoup, juste coincé dans un autre problème, si possible, aidez-moi - stackoverflow.com/questions/57970245/...
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.