Maîtriser le composant uni-search-bar d'uni-app : de la configuration à la gestion d'événements

Le composant uni-search-bar est un outil incontournable de la bibliothèque uni-ui pour implémenter rapidement des fonctionnalités de recherche dans une application multi-plateforme. Plutôt que de reconstruire manuellement un champ de saisie avec des balises <input> et de gérer péniblement les styles ou les comportements du clavier sur iOS et Android, ce composant offre une solution "prête à l'emploi". Il gère nativement la liaison de données bidirecsionnelle, le contrôle du focus et les interactions de nettoyage de saisie.

1. Configuraton et implémentation de base

Pour intégrer ce composant, assurez-vous que votre projet dispose de la bibliothèque uni-ui. L'implémentation la plus simple repose sur lu'tilisation de v-model pour synchroniser la saisie et l'écoute de l'événement @confirm pour déclencher l'action de recherche.

<template>
 <view class="search-container">
   <uni-search-bar 
     v-model="query" 
     placeholder="Rechercher un article..." 
     @confirm="onSearchAction"
   />
   <view v-if="query" class="info-text">
     Vous recherchez : {{ query }}
   </view>
 </view>
</template>

<script>
export default {
 data() {
   return {
     query: '' 
   }
 },
 methods: {
   onSearchAction(res) {
     // Déclenché lors de l'appui sur 'Entrée' ou l'icône de recherche
     const searchText = res.value;
     uni.showLoading({ title: 'Chargement...' });
     
     console.log('Exécution de la recherche pour :', searchText);
     
     // Simulation d'appel API
     setTimeout(() => {
       uni.hideLoading();
     }, 1000);
   }
 }
}
</script>

2. Optimisation avec la gestion des événements avancés

Une barre de recherche professionnelle ne se limite pas à valider une saisie. Pour offrir une expérience utilisateur fluide, il est nécessaire de manipuler d'autres événements clés :

  • @input : Déclenché à chaque caractère tapé. Idéal pour les suggestions en temps réel, à condition d'utiliser un debounce pour ne pas surcharger le serveur.
  • @focus et @blur : Utiles pour modifier l'interface utilisateur, comme afficher un historique de recherche lorsque le champ est actif et le masquer lorsqu'il perd le focus.
  • @clear : Permet de réinitialiser les résultats de recherche ou l'état de l'application lorsque l'utilisateur vide le champ via l'icône dédiée.

3. Exemple pratique : Auto-complétion avec contrôle de fréquence

L'exemple suivant montre comment utiliser l'événement @input avec une logique de temporisation pour éviter des appels réseau excessifs.

<template>
 <view>
   <uni-search-bar 
     v-model="term" 
     @input="handleInput" 
     @cancel="resetSearch"
     @clear="clearResults"
   />
   
   <view v-if="suggestions.length > 0" class="suggestion-box">
     <view v-for="(item, index) in suggestions" :key="index">
       {{ item }}
     </view>
   </view>
 </view>
</template>

<script>
export default {
 data() {
   return {
     term: '',
     suggestions: [],
     timer: null
   }
 },
 methods: {
   handleInput(val) {
     // Logique de Debounce
     clearTimeout(this.timer);
     this.timer = setTimeout(() => {
       this.fetchSuggestions(val);
     }, 400);
   },
   fetchSuggestions(text) {
     if (!text) {
       this.suggestions = [];
       return;
     }
     // Logique de récupération de données simulée
     this.suggestions = ['Résultat A', 'Résultat B'].map(s => `${s} pour "${text}"`);
   },
   resetSearch() {
     this.term = '';
     this.suggestions = [];
     console.log('Recherche annulée');
   },
   clearResults() {
     this.suggestions = [];
   }
 }
}
</script>

En exploitant ces propriétés et événements, vous pouvez transformer un simple champ de saisie en un module de recherche dynamique capable de gérer l'historique, les suggestions automatiques et les états de chargement, tout en garantissant une compatibilité optimale sur toutes les plateformes cibles d'uni-app.

Étiquettes: uniapp Vue.js frontend uni-ui mobile-development

Publié le 4 juin à 03h21