一尘不染

AngularJS ng-options创建范围

angularjs

我正在尝试创建一个select元素,该元素的页面编号为1,其中pages是一个变量,即我所拥有的页面数。我不知道该怎么做,是为了构造ng-
options表达式,以便它将给我所需的数字。这是我到目前为止的

<select ng-model="page" ng-options="???"></select>

我需要在ng-options表达式中放置什么才能使其创建我的select

<select>
    <option value="1">1</option>
    ...
    <option value="35">35</option>
</select>

我是否需要创建一个返回数字数组的函数并以某种方式在其中使用它,还是有一种更简单的方法呢?

任何帮助将不胜感激。

谢谢

编辑

发布我的问题后,我想出了一种方法,可以在控制器中创建一个名为Range的函数,该函数接受两个数字并返回一个包含该范围内所有值的数组。

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

然后在HTML中

<select ng-name="page" ng-options="page for page in Range(1, pages)"></select>

这是最简单的方法还是有更好的方法?


阅读 257

收藏
2020-07-04

共1个答案

一尘不染

你的方法很好。我想到的另一个选择是使用过滤器,因此您不必使用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<max; i++)
      input.push(i);
    return input;
  };
});

HTML:

<select ng-model="page" ng-options="n for n in [] | range:1:30"></select>

示例:http//jsfiddle.net/N3ZVp/1/

PS在您的主要文章示例中,您没有放在var的前面i。因此i在您的示例中被声明为全局变量。

2020-07-04