AngularJS ng-options crea rango

Estoy intentando crear un elemento selecto que tenga una lista de números 1 a páginas donde páginas es una variable que es el número de páginas que tengo. Lo que no sé hacer es estructurar la expresión ng-options para que me dé los números que necesito. Esto es lo que tengo hasta ahora

 

¿Qué debo poner en la expresión ng-options para que pueda crear mi selección como

  1 ... 35  

¿Necesito crear una función que devuelva una matriz de números y usarla de alguna manera o hay una manera más fácil de hacerlo?

cualquier ayuda sería muy apreciada.

Gracias

EDITAR

Después de publicar mi pregunta, descubrí una forma de hacerlo creando una función llamada Rango en mi controlador que toma dos números y devuelve una matriz con todos los valores en ese rango.

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

luego en el HTML que hice

  

¿Es esta la manera más simple de hacer esto o hay una mejor manera?

Tu camino funciona bien. Otra opción que se me vino a la cabeza es utilizar un filtro, por lo que no debe contaminar su controlador 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:

  

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

PD en su ejemplo en su publicación principal, no puso var delante de i . Entonces, i soy declarado como una variable global en tu ejemplo.

Por favor agrega ng-model, como abajo

  

Después de esto, tu ejemplo funcionará en jsfiddle

Otra solución para mantener todo en su plantilla:

  

Otro enfoque sin un bucle for es este:

controlador:

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

ver enlace:

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

La solución de Andy es genial, sin embargo, el rango no puede retroceder. Aquí está la versión mejorada:

 /* * 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 en la respuesta de Martynas. Lo modifiqué para incluir el último valor en el rango:

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

En CoffeeScript:

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

Y el HTML:

  

Aquí está la esencia con el Javascript

Si desea agregar un marcador de posición en la selección, entonces use la solución dada a continuación. Primero necesita definir el filtro así .