Angular JS - Automatiquement la mise au point d'entrée et de montrer typeahead déroulant - l'interface utilisateur.bootstrap.typeahead
Je suis en utilisant Angular JS - ui.bootstrap.typeahead:
Je tiens à cliquer sur un bouton et un champ de saisie et d'afficher automatiquement le typeahead suggestion de liste déroulante. J'ai une directive qui se concentre automatiquement le champ de saisie lorsque le bouton est cliqué. Comment puis-je montrer le menu déroulant automatiquement de sorte que l'utilisateur peut utiliser la flèche vers le bas, ou cliquez sur, de choisir rapidement un utilisateur?
J'ai créé un Plunker avec l'interface utilisateur-bootstrap JS fichier modifiable pour bricoler:
http://plnkr.co/edit/Z79LY0OYlwFc3wirjxol?p=preview
C'est mon script:
<!doctype html>
<html ng-app="plunker">
<head>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.2/angular.js"></script>
<script src="ui-bootstrap-tpls-0.10.0.js"></script>
</head>
<body>
<script>
angular.module('plunker', ['ui.bootstrap'])
.directive('focusMe', function($timeout, $parse) {
return {
//scope: true, //optionally create a child scope
link: function(scope, element, attrs) {
var model = $parse(attrs.focusMe);
scope.$watch(model, function(value) {
if(value === true) {
$timeout(function() {
element[0].focus();
});
}
});
}
};
});
function TypeaheadCtrl($scope, $http) {
$scope.selected = undefined;
$scope.states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Dakota', 'North Carolina', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'];
$scope.opened = false;
$scope.open = function() {
$scope.opened = true;
}
$scope.close = function() {
$scope.opened = false;
}
}
</script>
<div class='container-fluid' ng-controller="TypeaheadCtrl">
<h4>How can I open the typeahead dropdown automatically when button is pressed?</h4>
<p>I have a directive that automatically focuses on the field but I can't seem to automatically show the typeahead. Even adding down arrow key click support would be great.
<br/><br/>
<button class="btn btn-default" ng-show="!opened" ng-click="open()">Open Input and show typeahead!</button>
<button class="btn btn-default" ng-show="opened" ng-click="close()">Close Input</button>
<br/><br/>
<input type="text"
focus-me="opened"
ng-show="opened"
ng-model="selected"
typeahead="state for state in states | filter:$viewValue | limitTo:8"
class="form-control">
<br/>
<pre ng-show="opened">Model: {{selected | json}}</pre>
</div>
</body>
</html>
- c'est une demande de fonctionnalité demande à être une caractéristique standard... et la solution proposée était d'avoir typeahead-min-longueur="0" pour l'activer, pas en mesure de trouver le lien exact pour l'instant, mais il suffit de chercher angulaire problème d'interface utilisateur et vous seront pour la plupart l'obtenir.. lien
- FWIW, je suis tombé sur cette question, parce que j'essayais de faire un focus-sur-salon sur une entrée en tant que bien, mais à l'intérieur d'un bootstrap de l'interface utilisateur déroulante au lieu de simplement la vanille ng-show -- Mon entrée me concentrer sur 50% du temps que j'ai cliqué sur le menu déroulant de la bascule parce que bootstrap-liste n'avais pas fini de rendre la liste déroulante. J'ai donc trouvé une solution à long-polling de jQuery .is(':visible") (non disponible dans angulaire.élément, de sorte que vous avez à ajouter jQuery). Je bifurquais votre plunker et ajouté le bout de code qui permet de travailler à 100% du temps: plnkr.co/modifier/CAIWksiNdQnVqkn8mEgW?p=preview
- J'ai posté une réponse, here que vous pouvez trouver des accommodements.
Vous devez vous connecter pour publier un commentaire.
Comme HarishR mentionné dans un commentaire, il n'est pas intégré dans le support de cette fonctionnalité encore.
Mais je veux juste essayer de piratage autour et voici le résultat: http://plnkr.co/edit/Qrnat8yTvISuM1qHHDlA?p=preview
Il contient beaucoup de hacks pour faire cela fonctionne:
une coutume vide-typeahead directive qui interagissent avec le ngModel du contrôleur de l'application de la secretEmptyKey logique de contourner typeahead-min-contrôle de la longueur:
un filtre personnalisé comparateur de fonction qui retourne toujours true (afficher tous les résultats), quand un argument est le secretEmptyKey:
supprimer la limitTo filtre pour afficher tous les résultats
Fait!
.triggerHandler('input')
qui est de la partie angulaire.élément/jqLite mais je n'ai pas testé.Mise à jour:
J'ai ajouté de la directive github pour faciliter les mises à jour et d'accès.
Vous pouvez maintenant installer en tant que dépendance à travers la charmille.
Original post:
Je suis venu avec une assez propre hack qui ne pas nécessite aucune modification de l'interface utilisateur-bootstrap-npt. L'Idée est d'utiliser $setViewValue() pour déclencher la fenêtre contextuelle avec une combinaison d'un filtre spécial comparateur de fonction.
Afin de contourner le minLength vérifier, $setViewValue() doit être réglé à une valeur supérieure à 1, donc je suis en utilisant un espace de chaîne. Le rôle du comparateur la fonction est de traiter les un espace comme une correspondance à tous les éléments de sorte qu'ils apparaîtront lorsque vous cliquez sur une entrée vide.
J'ai créé une directive simple:
Utilisation:
typeahead-focus
pour chacun d'eux et comment puis-je établir leur ordre?typeahead-focus
sur plusieurs éléments d'entrée si c'est votre question. N'oubliez pas que vous avez à utiliser leemptyOrMatch
filtre sur eux. Jetez un oeil à la Utilisation section ci-dessus. Et merci, je vais ajouter une démo bientôt.typeahead-focus-on-select
de faux, mais n'a fait aucune différence. Je suis à l'aide de l'INTERFACE utilisateur bootstrap v0.14.3.typeahead-min-length="0"
en parallèle à cela, et remplacé à la dernière$setViewValue
pour définirviewValue || ''
(par exemple 'ou chaîne vide'). Qui permet d'ajouter ` | filtre:$viewValue " à la typeahead sans l'espace pour déclencher à la liste des valeurs d'interférer avec le filtrage..J'ai une solution qui fonctionne en modifiant le code ui-bootstrap-tpls-0.10.0.js.
Donc, il n'y a pas de différences dans la typeahead balisage html.
Vous pouvez avoir un coup d'oeil ici à http://plnkr.co/edit/LXHDpL?p=preview.
Pour utiliser ce correctif, utilisez les ui-bootstrap-tpls-0.10.0.js de le Gratter.
Pour voir mon évolution, ouvert ui-bootstrap-tpls-0.10.0.js à partir de la Gratter et la recherche pour "ahneo'.
Espère que cette aide
Maintenant, comme je n'ai pas assez de réputation pour le commentaire, je dois écrire une nouvelle réponse à avertir les gens runTarm la réponse ci-dessus. C'est une solution viable, mais il court le risque de tomber sur l'erreur suivante:
Ce qui semble être due à ng-l'accent étant une épreuve synchronisée (voir la discussion ici). Au lieu de cela, on peut utiliser le ng-click-attribut, et que cette erreur ne se produit pas.
Aussi, j'ai vérifié que
fonctionne tout aussi bien que le jQuery-déclencheur dans runTarm de réponse.
Semble être construit en charge cette fonctionnalité est à venir dans une prochaine version sous la forme de
typeahead-min-length
attribut de soutenir la valeur de 0.Il est mis en œuvre dans ce commit dans la branche master https://github.com/angular-ui/bootstrap/commit/d859f42cc022a5d8779f1c7b358486bbdd04ed57, mais il n'y a pas de version avec encore et il n'est pas dans le 0.14.x branche.
Nous l'espérons, une nouvelle version va venir rapidement, de sorte qu'il n'est pas nécessaire pour ces solutions de contournement plus.
Je voulais quelque chose comme l'OP de la description et la seule solution que j'ai trouvé était à venir avec un modèle qui combine le menu déroulant et typeahead directives - peut-être l'OP ou de quelqu'un d'autre va le trouver utile:
JS:
HTML:
Bien sûr, vous pouvez simplifier pour rendre les options juste un tableau de chaînes de caractères - j'ai fait d'eux des objets parce que c'était plus proche de ce dont j'avais besoin.
typeahead-min-longueur="0" est le tour est joué (je suis à l'aide de v0.4.0)
J'ai résolu ce problème par le biais d'une directive. Lorsque vous utilise cette directive, montre la liste sans filtre ensuite, vous tapez votre recherche pour trouver un élément.
Je laisse un point de vue code, pour tester le code ci-dessus.
Je voulais le typeahead d'ouvrir à chaque fois que mon entrée de l'élément a le focus.
@yohairosen la solution n'a pas fonctionné pour moi sur la dernière version du Angulaire de Bootstrap (Version: 1.0.3). Voici la solution qui a fonctionné pour moi. Il a impliqué manuellement en invoquant l'analyseur fixé par l'interface utilisateur-bootstrap-typeahead qui remplit les suggestions:
JS:
Cela peut être buggé car il suppose l'ajout d'un analyseur syntaxique par ui-bootstrap-typeahead est le seul.
Ce que nous voulons est de trigger('input') sur l'élément d'entrée lorsqu'il est porté.
La façon correcte de le faire dans Angulaire est de le faire dans une directive.
D'utilisation de cette directive sur la typeahead d'entrée de l'élément de
vous pouvez obtenir par le présent code
modifier le test à votre type-tête ID