Angularjs - 如何'ng-repeat'一个div为'ng-model'时代的值?

时间:2014-01-02 11:32:55

标签: javascript html angularjs

如果用户在文本框中输入“10”,我想使用Angularjs创建say 10 <div>

<input type="text" id="gcols" placeholder="Number of Columns" ng-model="cols"/>

因此,无论用户在此框中输入什么值,都应创建许多值。所以我的一般性问题是,如何'ng-repeat'<div>为'ng-model'次?

更新 感谢您的所有答案,我通过引用您的答案做了类似的事情。这是现在的工作,但告诉我,是否有任何其他逻辑比这更有效。

$scope.divs = new Array();

    $scope.create=function(){ //I added a button & invoked this function on its ng-click
            var a = $scope.cols;
            for(i=0;i<a;i++)
            {
                $scope.divs.push(a);
            }
            alert($scope.divs);
        };

3 个答案:

答案 0 :(得分:12)

您需要创建一个数组来迭代它。 在您的控制器中:

app.controller('ctrl', function ($scope) {
    $scope.cols = 0;
    $scope.arr = [];
    $scope.makeArray = function () {
        $scope.arr.length = 0;
        for (var i = 0; i < parseInt($scope.cols) ; i++) {
            $scope.arr.push(i);
        }
    }
});

在您看来:

<div ng-controller="ctrl">
    <input ng-model="cols" type="text" ng-change="makeArray()" />
    <div ng-repeat="o in arr">hi</div>
</div>

JSFiddle

答案 1 :(得分:6)

DEMO:http://jsfiddle.net/JsFUW/

在您的模块/ app / controller

$scope.cols =4; /* a default */
$scope.divs =[]; /* whatever these are */

在模板中

<input type="text" id="gcols" placeholder="Number of Columns" ng-model="cols"/>

  <div ng-repeat="div in divs | limitTo:cols" >
    ... 
  </div>

作为评论问题,试试这个:

在控制器中

  $scope.cols

在模板中

 <input type="text" id="gcols" placeholder="Number of Columns" ng-model="cols"/>

 <h3>cols: {{cols}} </h3>

您在键入时是否看到页面上的值发生了变化?如果不是,您的$ scope.cols不在模板范围内。

答案 2 :(得分:1)

在您看来:

<input ng-model="cols" ng-change="colsChanged()"/>

<div ng-repeat="item in items track by $index">{{$index}} {{item}}</div>

在您的控制器中:

app.controller('MyCtrl', function($scope) {
  $scope.cols = 0;
  $scope.colsChanged = function () {
     $scope.items = new Array(+$scope.cols);
  };

  //optional: if you're starting with 1 or more "cols"
  $scope.colsChanged();
});

或者,您可以滚动自己的指令,使用包含多次重复自身,但这可能会涉及到并且可能不会给您带来太大的好处。