Création d'un widget Typeahead avec AngularJS - SitePoint
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
- les propriétés d'objet JSON exactes à afficher dans le cadre des suggestions.
- Le modèle de la portée du contrôleur qui maintiendra l'élément sélectionné.
- Une fonction dans la portée du contrôleur qui s'exécute lorsqu'un élément est sélectionné.
- 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>
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>
É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>
- É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.
<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>
É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>
<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</span> 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><span><div</span> class<span>="items"</span> ng-hide<span>="!model.length || selected"</span>></span> </span> <span><span><span><div</span> 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><span><span><p</span> class<span>="title"</span>></span>{{item[title]}}<span><span></p</span>></span> </span> <span><span><span><p</span> class<span>="subtitle"</span>></span>{{item[subtitle]}}<span><span></p</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</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
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?
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?
$ 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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

La discussion sur la réalisation des effets de défilement de parallaxe et d'animation des éléments dans cet article explorera comment réaliser le site officiel de Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ...

Les dernières tendances de JavaScript incluent la montée en puissance de TypeScript, la popularité des frameworks et bibliothèques modernes et l'application de WebAssembly. Les prospects futurs couvrent des systèmes de type plus puissants, le développement du JavaScript côté serveur, l'expansion de l'intelligence artificielle et de l'apprentissage automatique, et le potentiel de l'informatique IoT et Edge.

Apprendre JavaScript n'est pas difficile, mais c'est difficile. 1) Comprendre les concepts de base tels que les variables, les types de données, les fonctions, etc. 2) Master la programmation asynchrone et les implémenter via des boucles d'événements. 3) Utilisez les opérations DOM et promettez de gérer les demandes asynchrones. 4) Évitez les erreurs courantes et utilisez des techniques de débogage. 5) Optimiser les performances et suivre les meilleures pratiques.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

Explorez la mise en œuvre de la fonction de glisser et de réglage du panneau de type VScode dans le frontal. Dans le développement frontal, comment implémenter un VScode comme ...
