Méthode d'implémentation anti-shake dans Vue3
P粉055726146
2023-08-24 12:07:02
<p>J'ai une zone de saisie de filtre et je souhaite filtrer une liste d'éléments. La liste est longue, je souhaite donc utiliser l'antishake pour retarder l'application du filtre jusqu'à ce que l'utilisateur arrête de taper afin d'améliorer l'expérience utilisateur. Ceci est ma zone de saisie qui est liée à filterText pour filtrer la liste. </p>
<pre class="brush:php;toolbar:false;"><input type="text" v-model="state.filterText" /></pre>
Bonjour, c'est la première fois que je réponds à une question ici, alors n'hésitez pas à corriger ma réponse, je vous en serai très reconnaissant. Je pense que la solution la plus belle et la plus légère consiste à créer globalement une directive que vous pouvez utiliser de manière aléatoire dans tous vos formulaires.
Créez d'abord un fichier avec des directives, par exemple. debouncer.js
Créez ensuite la fonction anti-shake
Après avoir défini ce fichier, vous pouvez vous rendre dans votre main.js pour l'importer et utiliser les fonctions exportées.
Terminé, lorsque vous souhaitez utiliser une directive dans une zone de saisie, faites-le comme ça, pas besoin d'importer ou quoi que ce soit d'autre.
La directive v-model.lazy est très importante si vous choisissez de procéder de cette façon, car par défaut elle mettra à jour les propriétés liées sur l'événement d'entrée, mais la définition de cette directive le fera attendre l'événement de changement, ce qui est le cas. l'événement que nous émettons dans la fonction anti-shake. Cela empêchera v-model de se mettre à jour automatiquement jusqu'à ce que vous arrêtiez la saisie ou que le délai d'attente expire (peut être défini dans la valeur de la directive). J'espère que cela est clair.
Je n'ai pas trouvé de solution satisfaisante car je voulais voir mes fixations dans le modèle, j'ai donc décidé de partager ma solution. J'ai écrit une simple fonction anti-rebond et lié le comportement en utilisant la syntaxe suivante :
La syntaxe du modèle est la suivante :