如果用户在文本框中输入“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);
};
答案 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>
答案 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();
});
或者,您可以滚动自己的指令,使用包含多次重复自身,但这可能会涉及到并且可能不会给您带来太大的好处。