AngularJS ng-options crée une plage

J’essaie de créer un élément select qui a une liste de numéros 1 à pages où les pages est une variable qui correspond au nombre de pages que j’ai. Ce que je ne sais pas faire, c’est structurer l’expression ng-options pour qu’elle me donne les chiffres dont j’ai besoin. Voici ce que j’ai jusqu’ici

 

que dois-je mettre dans l’expression ng-options pour qu’elle crée ma sélection

  1 ... 35  

Dois-je créer une fonction qui renvoie un tableau de nombres et l’utilise d’une manière ou d’une autre ou existe-t-il un moyen plus simple de le faire?

toute aide serait grandement appréciée.

Merci

MODIFIER

Après avoir posté ma question, j’ai trouvé un moyen de le faire en créant une fonction appelée Range dans mon contrôleur qui prend deux nombres et renvoie un tableau contenant toutes les valeurs de cette plage.

 $scope.Range = function(start, end) { var result = []; for (var i = start; i <= end; i++) { result.push(i); } return result; }; 

alors dans le HTML je l’ai fait

  

Est-ce la façon la plus simple de le faire ou y a-t-il une meilleure solution?

Votre chemin fonctionne bien. Une autre option qui m’est venue est d’utiliser un filtre, vous n’avez donc pas à polluer votre contrôleur avec Range.

JS:

 var myApp = angular.module('myApp', []); myApp.filter('range', function() { return function(input, min, max) { min = parseInt(min); //Make ssortingng input int max = parseInt(max); for (var i=min; i 

HTML:

  

Exemple: http://jsfiddle.net/N3ZVp/1/

PS dans votre exemple dans votre post principal, vous n'avez pas mis var devant i . Donc, i déclaré comme variable globale dans votre exemple.

S’il vous plaît append ng-model, comme ci-dessous

  

Après cela, votre exemple fonctionnera dans jsfiddle

Une autre solution pour tout garder dans votre modèle:

  

une autre approche sans boucle for est la suivante:

manette:

  $scope.arr = []; $scope.arr.length = count; 

liaison de vue:

  ng-options="arr.indexof(i) for i in arr" 

La solution d’Andy est géniale, mais la gamme ne peut pas reculer. Voici la version améliorée:

 /* * Creates a range * Usage example:  */ myApp.filter('range', function() { return function(input, start, end) { start = parseInt(start); end = parseInt(end); var direction = (start <= end) ? 1 : -1; while (start != end) { input.push(start); start += direction; } return input; }; }); 

Piggybacking sur la réponse des martynas. Je l’ai modifié pour inclure la dernière valeur de la plage:

 /* * Creates a range * Usage example:  */ .filter('range', function () { return function (input, start, end) { var direction; start = parseInt(start); end = parseInt(end); if (start === end) { return [start]; } direction = (start <= end) ? 1 : -1; while (start != end) { input.push(start); if (direction < 0 && start === end + 1) { input.push(end); } if (direction > 0 && start === end - 1) { input.push(end); } start += direction; } return input; }; }); 

Dans CoffeeScript:

 app.filter 'range', -> (input, min, max) -> input.push(i) for i in [parseInt(min)..parseInt(max)] 

Et le HTML:

  

Voici l’ essentiel avec le Javascript

Si vous souhaitez append un espace réservé dans select, utilisez la solution ci-dessous. Vous devez d’abord définir le filtre comme ceci .