AngularJS ng-options crea range

Sto cercando di creare un elemento di selezione che abbia un elenco di numeri da 1 a pagine in cui le pagine sono una variabile che corrisponde al numero di pagine che ho. Quello che non so come fare è strutturare l’espressione ng-options in modo che mi dia i numeri che mi servono. Ecco cosa ho finora

 

cosa ho bisogno di mettere nell’espressione ng-options in modo che possa creare il mio select like

  1 ... 35  

ho bisogno di creare una funzione che restituisce una serie di numeri e usarlo in qualche modo o c’è un modo più semplice per farlo?

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie

MODIFICARE

Dopo aver postato la mia domanda ho capito un modo per farlo creando una funzione chiamata Range nel mio controller che prende due numeri e restituisce una matrice con tutti i valori in quell’intervallo.

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

poi nel codice HTML che ho fatto

  

È questo il modo più semplice per farlo o c’è un modo migliore?

Il tuo modo funziona bene. Un’altra opzione che mi è venuta in mente è di usare un filtro, in modo da non dover inquinare il controller con Range.

JS:

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

HTML:

  

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

PS nel tuo esempio nel tuo post principale, non hai messo var di fronte a i . Quindi i sono dichiarato come variabile globale nel tuo esempio.

Si prega di aggiungere ng-model, come di seguito

  

Dopo questo il tuo esempio funzionerà con jsfiddle

Un’altra soluzione per mantenere tutto nel tuo modello:

  

un altro approccio senza un ciclo for è questo:

Controller:

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

visualizza il binding:

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

La soluzione di Andy è ottima, tuttavia la gamma non può tornare indietro. Ecco la versione migliorata:

 /* * 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 sulla risposta di Martynas. L’ho modificato per includere l’ultimo valore nell’intervallo:

 /* * 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; }; }); 

In CoffeeScript:

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

E l’HTML:

  

Ecco il succo con il Javascript

Se si desidera aggiungere un segnaposto in selezionare, utilizzare la soluzione indicata di seguito. Devi prima definire il filtro in questo modo .