0
J'essaye de créer une directive de typehead réutilisable dans AngularJS mais j'ai heurté quelques bosses sur la route. Voici mon exemple de travail:Angularjs directive de typehead
Directives.js
app.directive('autosuggest', function() {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
/* Nothing here yet */
}
};
});
app.directive('suggestinput', function() {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
// Bind keys
elem.bind('keydown', function (e) {
if (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13) { scope.$emit('listNavigate', { code: e.keyCode }); }
else {
// Get suggestions
scope.getSuggest(attrs.source, elem.val());
}
});
// Listen for suggestion list
scope.$on('listSelect', function (e, data) {
elem.val(data.name);
});
}
};
});
app.directive('suggestlist', function() {
var selectedIndex = -1;
return {
restrict: 'A',
link: function (scope, elem, attrs) {
scope.$on('listNavigate', function (e, data) {
if (data.code === 38) {
selectedIndex--;
// User pressed up arrow
elem.children().removeClass('sel');
elem.children().eq(selectedIndex).addClass('sel');
} else if(data.code == 40) {
selectedIndex++;
// User pressed down arrow
elem.children().removeClass('sel');
elem.children().eq(selectedIndex).addClass('sel');
} else if(data.code == 13) {
// Prepare data
var selectData = {};
selectData.suggestValue = elem.children().eq(selectedIndex).children().html();
selectData.suggestId = elem.children().eq(selectedIndex).children().attr('item-id');
// Send data to input(s)
scope.$emit('listSelect', selectData);
}
});
}
};
});
Html:
<fieldset autosuggest>
<input type="hidden" name="languageId">
<input type="text" suggestinput source="languages">
<input type="submit" class="button" value="Save">
<ul suggestlist ng-show="suggest.languages" class="suggestList">
<li ng-repeat="language in suggest.languages">
<a href="#" ng-bind="language.name" item-id="{{language.id}}"></a>
</li>
</ul>
</fieldset>
J'ai deux questions:
- Comment puis-je passer l'élément-id de la liste de suggestions à l'entrée cachée?
- Comment en faire un composant réutilisable? (faites-le fonctionner même si j'ai plusieurs têtes de caractères sur la même page)
Merci!
J'utilise bootstrap 3 RC1. J'ai attendu un moment pour une bibliothèque mise à jour, mais je n'ai encore rien trouvé. Peut-il être facilement modifié pour fonctionner avec la dernière version de bootstrap? Merci beaucoup pour votre réponse. – Angelin
Peu importe, je l'ai compris, merci beaucoup pour votre réponse! – Angelin
Désolé, je n'ai même pas vu votre premier commentaire, été occupé. Avez-vous obtenu l'angular.ui.bootstrap pour travailler avec le bootstrap 3 rc1? @AngelinSirbu – dcodesmith