Comment puis-je regarder les nouveaux changements de chaîne de recherche ui-select (anciennement ui-select2) de l'interface utilisateur angulaire?
J'ai remarqué que le Angular-UI ont cessé de l'INTERFACE utilisateur-Select2 directive en faveur de la nouvelle INTERFACE utilisateur-Sélectionnez (avec de multiples thèmes - select2, bootstrap, selectize).
Il ressemble à ceci:
<ui-select multiple ng-model="multipleDemo.colors" theme="select2" ng-disabled="disabled" style="width: 300px;">
<ui-select-match placeholder="Select colors...">{{$item}}</ui-select-match>
<ui-select-choices repeat="color in availableColors | filter:$select.search">
{{color}}
</ui-select-choices>
</ui-select>
<p>Selected: {{multipleDemo.colors}}</p>
Au départ, mon selectbox est censé être vide, mais prêt à prendre les caractères tapés, qui est une chaîne d'au moins 4 caractères et ensuite faire un appel API pour récupérer une liste de valeurs qui sont la pour remplir la boîte. Une valeur sera choisie, et la recherche doit être répétée si nécessaire.
J'ai d'abord essayé $watch
ing la ng-model
qui dans ce cas est multipleDemo.colors
(à l'aide de cet exemple de la démos). L'appel de l'API n'a jamais eu lieu et j'ai compris pourquoi. Le modèle actuel n'est pas du tout changé, car il modifie uniquement lorsqu'une sélection est faite (mon selectbox est vide donc rien ne peut être sélectionné).
Ma conclusion est que je (être capable de) $watch
ce qui a été ajouté en tant que filtre, à savoir filter: $select.search
.
Personne ne sait comment suis-je censé l'utiliser dans mon contrôleur?
Ce:
$scope.$watch('$select.search', function(newVal){
alert(newVal);
});
ne fonctionne pas.
EDIT:
Pour toute personne de référence, voir cette courte discussion: Est-il possible d'ajouter le support pour la requête personnalisée fonction comme la select2?
EDIT 2:
J'ai résolu ce problème en utilisant $emit
à partir de la directive, de sorte que la valeur est disponible dans mon contrôleur de maintenant. Mais maintenant je voudrais savoir comment puis-je remplacer cette partie de la directive la directive elle-même peuvent être laissés intacts, de sorte qu'il ne se casse pas dans les futures mises à jour?
source d'informationauteur developer10
Vous devez vous connecter pour publier un commentaire.
Utiliser le
refresh
attribut sur la<ui-select-choices>
élément pour appeler une fonction à votre portée avec$select.search
en tant que paramètre:Puis d'utiliser la fonction (
refreshColors()
dans cet extrait de code) pour mettre à jourmultipleDemo.availableColors
en conséquence.Vous pouvez également utiliser le
refresh-delay
attribut pour spécifier le nombre de millisecondes à antirebond la fonction de sorte qu'il n'est pas appelé à de trop nombreuses fois en succession rapide.J'ai aussi mis
availableColors
surmultipleDemo
comme vous l'avez fait pourmultipleDemo.colors
comme c'est recommandé.Référence: interface utilisateur-sélectionnez la directive wiki en vertu de l'article Exemples: Async.
Il semble y avoir une
on-select
attribut, voir Github exemple:Utilisation ngInit pour obtenir la valeur,
Vous pouvez alse watch", mySelect " au lieu
Je l'ai résolu par la création d'un événement dans le bon endroit dans la directive, puis
$emitting
- finalement, je suis capable d'écouter l'événement dans mon contrôleur et l'utilisation de la valeur.L'inconvénient de cette est que je l'ai mis directement dans la 3e partie de la directive, de sorte qu'il ne peut pas être mis à jour en toute sécurité. J'ai besoin de trouver un moyen de remplacer la directive. Si vous avez des idées, s'il vous plaît laissez-moi savoir.