recherche
Maisoninterface Webjs tutorielCréation d'un widget Typeahead avec AngularJS - SitePoint

Creating a Typeahead Widget with AngularJS - SitePoint

Création d'un widget Typeahead avec AngularJS - SitePoint

Si vous commencez un projet AngularJS, vous voudrez peut-être que tous les composants écrits en angulaire. Bien qu'il soit certainement possible de réutiliser les plugins jQuery existants, lancer un tas de jQuery à l'intérieur d'une directive n'est pas toujours la bonne façon de faire les choses. Mon conseil serait d'abord de vérifier si la même chose peut être implémentée avec Pure Angular d'une manière plus simple / meilleure. Cela maintient votre code d'application propre et maintenable. Ce tutoriel, ciblé vers les débutants, guide les lecteurs à travers la création d'un simple widget de typehead avec AngularJS.

Les plats clés

  • Le tutoriel guide les lecteurs en créant un widget Typeahead avec AngularJS, qui fournit des suggestions en tant qu'utilisateur dans une zone de texte. Le widget est conçu pour être hautement configurable et facilement intégré dans les systèmes existants.
  • Le processus consiste à construire une usine qui interagit avec une API RESTful et renvoie les données JSON pour les suggestions de réduction automatique, la création d'une directive pour encapsuler le champ de saisie de type type et la création d'un modèle pour la directive. La directive est maintenue configurable pour que les utilisateurs finaux puissent ajuster des options telles que les propriétés d'objet JSON à afficher dans le cadre des suggestions et le modèle de la portée du contrôleur qui contiendra l'élément sélectionné.
  • Le tutoriel explique également comment mettre à jour la fonction de liaison de la directive et configurer la directive à utiliser. Le produit final est un widget Typeahead AngularJS avec des options de configuration, qui peuvent être personnalisés en utilisant CSS. Le code source complet est disponible en téléchargement sur github.

Présentation

Dans ce tutoriel, nous allons créer un simple widget Typeahead qui crée des suggestions dès que quelqu'un commence à taper dans une zone de texte. Nous architeserons l'application de telle manière que le produit final sera très configurable et peut facilement être branché sur un système existant. Les étapes de base impliquées dans le processus de création sont:
  • Créez une usine qui interagit avec une API RESTful et renvoie JSON qui sera utilisée pour les suggestions complètes automatiquement.
  • Créer une directive qui utilisera les données JSON et encapsulera le champ de saisie de type Typea.
  • Gardez la directive configurable afin que les utilisateurs finaux puissent configurer les options suivantes.

Options de configuration

  1. les propriétés d'objet JSON exactes à afficher dans le cadre des suggestions.
  2. Le modèle de la portée du contrôleur qui maintiendra l'élément sélectionné.
  3. Une fonction dans la portée du contrôleur qui s'exécute lorsqu'un élément est sélectionné.
  4. Un texte d'espace réservé (invite) pour le champ de saisie de type tact.

Étape 1: Construire une usine pour obtenir des données

En tant que première étape, créons une usine qui utilise le service $ http d'Angular pour interagir avec les API RESTful. Jetez un œil à l'extrait suivant:
<span>var typeAhead = angular.module('app', []);
</span>
typeAhead<span>.factory('dataFactory', function($http) {
</span>  <span>return {
</span>    <span>get: function(url) {
</span>      <span>return $http.get(url).then(function(resp) {
</span>        <span>return resp.data; // success callback returns this
</span>      <span>});
</span>    <span>}
</span>  <span>};
</span><span>});</span>
Le code précédent crée une usine appelée DataFactory qui récupère les données JSON d'une API. Nous n'entrerons pas dans les détails de l'usine, mais nous devons comprendre brièvement le fonctionnement du service $ http. Vous transmettez une URL à la fonction get (), qui renvoie une promesse. Un autre appel à alors () sur cette promesse renvoie également une autre promesse (nous renvoyons cette promesse de la fonction get () de l'usine). Cette promesse est résolue avec la valeur de retour du succès transmis à alors (). Donc, à l'intérieur de notre contrôleur, nous n'interagissons pas directement avec $ http. Au lieu de cela, nous demandons une instance d'usine dans le contrôleur et appelons sa fonction get () avec une URL. Ainsi, notre code de contrôleur qui interagit avec l'usine ressemble à ceci:
typeAhead<span>.controller('TypeAheadController', function($scope<span>, dataFactory</span>) { // DI in action
</span>  dataFactory<span>.get('states.json').then(function(data) {
</span>    $scope<span>.items = data;
</span>  <span>});
</span>  $scope<span>.name = ''; // This will hold the selected item
</span>  $scope<span>.onItemSelected = function() { // this gets executed when an item is selected
</span>    <span>console.log('selected=' + $scope.name);
</span>  <span>};
</span><span>});</span>
Le code précédent utilise un point de terminaison API appelé states.json qui renvoie une liste JSON des États américains. Lorsque les données sont disponibles, nous stockons la liste dans les éléments du modèle de portée. Nous utilisons également le nom du modèle pour maintenir l'élément sélectionné. Enfin, la fonction OnItemSelected () est exécutée lorsque l'utilisateur sélectionne un état particulier.

Étape 2: Création de la directive

Commençons par la directive Typeahead, illustrée ci-dessous.
typeAhead<span>.directive('typeahead', function($timeout) {
</span>  <span>return {
</span>    <span>restrict: 'AEC',
</span>    <span>scope: {
</span>      <span>items: '=',
</span>      <span>prompt: '@',
</span>      <span>title: '@',
</span>      <span>subtitle: '@',
</span>      <span>model: '=',
</span>      <span>onSelect: '&'
</span>    <span>},
</span>    <span>link: function(scope<span>, elem, attrs</span>) {
</span>    <span>},
</span>    <span>templateUrl: 'templates/templateurl.html'
</span>  <span>};
</span><span>});</span>
Dans la directive, nous créons une portée isolée qui définit plusieurs propriétés:
  • Éléments: utilisés pour passer la liste JSON à la portée isolée.
  • Invite: liaison à sens unique pour le passage du texte de l'espace réservé pour le champ de saisie de type Typea.
  • Titre et sous-titre: Chaque entrée du champ complet complet a un titre et un sous-titre. La plupart des widgets Typeahead fonctionnent de cette façon. Ils ont généralement (sinon toujours) deux champs pour chaque entrée dans les suggestions déroulantes. Si un objet JSON a des propriétés supplémentaires, cela agit comme un moyen de passer les deux propriétés qui seront affichées dans chaque suggestion de la liste déroulante. Dans notre cas, le titre correspond au nom de l'État, tandis que le sous-titre représente son abréviation.
  • Modèle: liaison bidirectionnelle pour stocker la sélection.
  • onSelect: liaison de la méthode, utilisée pour exécuter la fonction dans la portée du contrôleur une fois la sélection terminée.
Remarque: un exemple de réponse JSON est illustré ci-dessous:
<span>var typeAhead = angular.module('app', []);
</span>
typeAhead<span>.factory('dataFactory', function($http) {
</span>  <span>return {
</span>    <span>get: function(url) {
</span>      <span>return $http.get(url).then(function(resp) {
</span>        <span>return resp.data; // success callback returns this
</span>      <span>});
</span>    <span>}
</span>  <span>};
</span><span>});</span>

Étape 3: Créez le modèle

Maintenant, créons un modèle qui sera utilisé par la directive.
typeAhead<span>.controller('TypeAheadController', function($scope<span>, dataFactory</span>) { // DI in action
</span>  dataFactory<span>.get('states.json').then(function(data) {
</span>    $scope<span>.items = data;
</span>  <span>});
</span>  $scope<span>.name = ''; // This will hold the selected item
</span>  $scope<span>.onItemSelected = function() { // this gets executed when an item is selected
</span>    <span>console.log('selected=' + $scope.name);
</span>  <span>};
</span><span>});</span>
Tout d'abord, nous rendons un champ de texte d'entrée où l'utilisateur tapera. L'invite de propriété de portée est affectée à l'attribut d'espace réservé. Ensuite, nous parcourons la liste des états et affichons les propriétés du nom et de l'abréviation. Ces noms de propriétés sont configurés via les propriétés du titre et des sous-titres. Les directives NG-MouseEnter et NG-Class sont utilisées pour mettre en évidence l'entrée lorsqu'un utilisateur plane avec la souris. Ensuite, nous utilisons Filtre: Model, qui filtre la liste par le texte entré dans le champ de saisie. Enfin, nous avons utilisé la directive NG-Hide pour masquer la liste lorsque le champ de texte d'entrée est vide ou que l'utilisateur a sélectionné un élément. La propriété sélectionnée est définie sur true à l'intérieur de la fonction handleselection () et définie sur False False (pour afficher la liste des suggestions) lorsque quelqu'un commence à taper dans le champ de saisie.

Étape 4: Mettez à jour la fonction de lien

Ensuite, mettons à jour la fonction de lien de notre directive comme indiqué ci-dessous.
typeAhead<span>.directive('typeahead', function($timeout) {
</span>  <span>return {
</span>    <span>restrict: 'AEC',
</span>    <span>scope: {
</span>      <span>items: '=',
</span>      <span>prompt: '@',
</span>      <span>title: '@',
</span>      <span>subtitle: '@',
</span>      <span>model: '=',
</span>      <span>onSelect: '&'
</span>    <span>},
</span>    <span>link: function(scope<span>, elem, attrs</span>) {
</span>    <span>},
</span>    <span>templateUrl: 'templates/templateurl.html'
</span>  <span>};
</span><span>});</span>
La fonction mancheleselection () met à jour la propriété Scope, modèle, avec le nom de l'état sélectionné. Ensuite, nous réinitialisons les propriétés actuelles et sélectionnées. Ensuite, nous appelons la fonction onSelect (). Un délai est ajouté car l'affectation Scope.Model = SelectedItem ne met pas immédiatement à jour la propriété de portée du contrôleur lié. Il est souhaitable d'exécuter la fonction de rappel de la portée du contrôleur après la mise à jour du modèle avec l'élément sélectionné. C’est la raison pour laquelle nous avons utilisé un service de temps mort $. De plus, les fonctions isCurrent () et setCurrent () sont utilisées ensemble dans le modèle pour mettre en évidence les entrées de la suggestion complète automatique. Le CSS suivant est également utilisé pour terminer le processus de surbrillance.
<span>{
</span>  <span>"name": "Alabama",
</span>  <span>"abbreviation": "AL"
</span><span>}</span>

Étape 5: Configurez et utilisez la directive

Enfin, appelons la directive dans le HTML, comme indiqué ci-dessous.
<span><span><span><input> type<span>="text"</span> ng-model<span>="model"</span> placeholder<span>="{{prompt}}"</span> ng-keydown<span>="selected=false"</span> /></span>
</span><span><span><span><br>/></span>
</span>
<span><span><span><div> class<span>="items"</span> ng-hide<span>="!model.length || selected"</span>>
  <span><span><span><div> class<span>="item"</span> ng-repeat<span>="item in items | filter:model  track by $index"</span> ng-click<span>="handleSelection(item[title])"</span> <span>style<span>="<span>cursor:pointer</span>"</span></span> ng-class<span>="{active:isCurrent($index)}"</span> ng-mouseenter<span>="setCurrent($index)"</span>>
    <span><span><span><p> class<span>="title"</span>></p></span>{{item[title]}}<span><span></span>></span>
</span>    <span><span><span><p> class<span>="subtitle"</span>></p></span>{{item[subtitle]}}<span><span></span>></span>
</span>  <span><span><span></span></span></span></span></span>
</div></span>></span>
</span><span><span><span></span></span></span>
</div></span>></span></span></span></span>

Conclusion

Ce tutoriel vous a montré comment créer un widget Typeahead AngularJS avec des options de configuration. Le code source complet est disponible en téléchargement sur github. N'hésitez pas à commenter si quelque chose n'est pas clair ou si vous voulez améliorer quoi que ce soit. N'oubliez pas non plus de consulter la démo en direct.

Des questions fréquemment posées sur la création d'un widget Typeahead avec AngularJS

Comment puis-je personnaliser l'apparence de la liste déroulante Typeahead?

La personnalisation de l'apparence de la liste déroulante Typeahead peut être réalisée en utilisant CSS. Vous pouvez cibler le menu déroulant en utilisant la classe .Dropdown-menu. Par exemple, si vous souhaitez modifier la couleur de l'arrière-plan et la couleur de la police, vous pouvez utiliser le code CSS suivant:

.Dropdown-menu {
background-Color: # f8f9fa;
couleur: # # 343A40;
}
N'oubliez pas d'inclure ce CSS dans votre fichier CSS principal ou dans les balises dans votre fichier html.

Comment puis-je limiter le nombre de suggestions dans la liste déroulante Typeahead?

limitant le nombre de suggestions dans la liste déroulante Typeahead peut être effectuée en utilisant l'attribut Typeahead-Min-Lingment. Cet attribut spécifie le nombre minimum de caractères qui doivent être entrés avant que Typeahead ne commence à se lancer.

comment puis-je utiliser une fonctionnalité de sélection d'objets avec TypeAl?

pour utiliser une fonctionnalité de sélection d'objets avec Typeahead, vous pouvez utiliser l'attribut Typeahead-on-Select. Cet attribut vous permet de spécifier une fonction à appeler lorsqu'une correspondance est sélectionnée. La fonction sera transmise l'élément sélectionné. Par exemple:


$ scope.onselect = fonction (élément, modèle, étiquette) {
// faire quelque chose avec l'élément sélectionné
};

comment puis-je utiliser Typeahead avec bootstrap dans AngularJS?

Pour utiliser Typeahead avec bootstrap dans AngularJS, vous devez inclure le module UI.bootstrap dans votre application AngularJS. Ce module fournit un ensemble de directives AngularJS basées sur le balisage de bootstrap et le CSS. La directive Typeahead peut être utilisée comme suit:

Dans cet exemple, les états sont un tableau d'états, $ ViewValue est la valeur saisie par l'utilisateur et limite: 8 limite le nombre de suggestions à 8.

comment puis-je utiliser la tact avec des données distantes en Angularjs?

Pour utiliser Typeahead avec des données distantes dans AngularJS, vous pouvez utiliser le service $ http pour récupérer les données d'un serveur distant. L'attribut Typeahead peut être utilisé pour lier le champ de saisie aux données récupérées. Par exemple:

$ scope.getStates = fonction (val) {

return $ http.get ('/ api / states', {
params: {
name: val
}
}). Puis (fonction (réponse) {
return réponse.data.map (fonction (item) {
return item.name;
});
});
};
Dans votre html, vous pouvez utiliser la fonction GetStates comme ceci:


Dans cet exemple, GetStates est une fonction qui récupère les états à partir d'un serveur distant en fonction de la valeur saisie par le utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Remplacer les caractères de chaîne en javascriptRemplacer les caractères de chaîne en javascriptMar 11, 2025 am 12:07 AM

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

Créez vos propres applications Web AjaxCréez vos propres applications Web AjaxMar 09, 2025 am 12:11 AM

Vous voici donc, prêt à tout savoir sur cette chose appelée Ajax. Mais qu'est-ce que c'est exactement? Le terme Ajax fait référence à un regroupement lâche de technologies utilisées pour créer un contenu Web interactif dynamique. Le terme Ajax, inventé à l'origine par Jesse J

10 JQUERY FUN ET PLIGINS DE GAMES10 JQUERY FUN ET PLIGINS DE GAMESMar 08, 2025 am 12:42 AM

10 plugins de jeu JQuery amusants pour rendre votre site Web plus attrayant et améliorer l'adhérence des utilisateurs! Bien que Flash soit toujours le meilleur logiciel pour développer des jeux Web occasionnels, JQuery peut également créer des effets surprenants, et bien qu'il ne soit pas comparable aux jeux Flash Pure Action, dans certains cas, vous pouvez également vous amuser inattendu dans votre navigateur. jeu jquery tic toe Le "Hello World" de la programmation de jeux a désormais une version jQuery. Code source JQUERY Crazy Word Composition Game Il s'agit d'un jeu de remplissage, et il peut produire des résultats étranges en raison de ne pas connaître le contexte du mot. Code source Jeu de balayage de la mine jQuery

Tutoriel JQuery Parallax - Contexte d'en-tête animéTutoriel JQuery Parallax - Contexte d'en-tête animéMar 08, 2025 am 12:39 AM

Ce tutoriel montre comment créer un effet de fond de parallaxe captivant à l'aide de jQuery. Nous allons construire une bannière d'en-tête avec des images en couches qui créent une profondeur visuelle étonnante. Le plugin mis à jour fonctionne avec jQuery 1.6.4 et plus tard. Télécharger le

Comment créer et publier mes propres bibliothèques JavaScript?Comment créer et publier mes propres bibliothèques JavaScript?Mar 18, 2025 pm 03:12 PM

L'article discute de la création, de la publication et du maintien des bibliothèques JavaScript, en se concentrant sur la planification, le développement, les tests, la documentation et les stratégies de promotion.

Comment optimiser le code JavaScript pour les performances dans le navigateur?Comment optimiser le code JavaScript pour les performances dans le navigateur?Mar 18, 2025 pm 03:14 PM

L'article traite des stratégies pour optimiser les performances JavaScript dans les navigateurs, en nous concentrant sur la réduction du temps d'exécution et la minimisation de l'impact sur la vitesse de chargement de la page.

Commencer avec Matter.js: IntroductionCommencer avec Matter.js: IntroductionMar 08, 2025 am 12:53 AM

Matter.js est un moteur de physique du corps rigide 2D écrit en JavaScript. Cette bibliothèque peut vous aider à simuler facilement la physique 2D dans votre navigateur. Il fournit de nombreuses fonctionnalités, telles que la capacité de créer des corps rigides et d'attribuer des propriétés physiques telles que la masse, la zone ou la densité. Vous pouvez également simuler différents types de collisions et de forces, tels que la frottement de gravité. Matter.js prend en charge tous les navigateurs grand public. De plus, il convient aux appareils mobiles car il détecte les touches et est réactif. Toutes ces fonctionnalités font de votre temps pour apprendre à utiliser le moteur, car cela facilite la création d'un jeu ou d'une simulation 2D basé sur la physique. Dans ce tutoriel, je couvrirai les bases de cette bibliothèque, y compris son installation et son utilisation, et fournir un

Rafraîchissement automatique du contenu div utilisant jQuery et AjaxRafraîchissement automatique du contenu div utilisant jQuery et AjaxMar 08, 2025 am 12:58 AM

Cet article montre comment actualiser automatiquement le contenu d'un div toutes les 5 secondes à l'aide de jQuery et Ajax. L'exemple récupère et affiche les derniers articles de blog d'un flux RSS, ainsi que le dernier horodatage de rafraîchissement. Une image de chargement est en optiona

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel