我正在使用angular.js和(出于参数考虑)引导程序。现在我需要遍历“事物”并将其显示在“行”中:
<div class="row">
<div class="span4">...</div>
<div class="span4">...</div>
<div class="span4">...</div>
</div>
<div class="row">
etc...
现在,我该如何.row
用角度关闭每隔三点的div?我从angular-ui尝试过ui-if,但即使这样也没有成功。
如果要使用服务器端渲染,则可以执行以下操作(此处为JSP语法,但没有关系):
<div class="row>
<c:forEach items="${things}" var="thing" varStatus="i">
<div class="span4">
..
</div>
<%-- Here is the trick:--%>
<c:if test="${i.index % 3 == 2}">
</div><div class="row">
</c:if>
</c:forEach>
</div>
请注意,我实际上需要在这里更改DOM,而不仅仅是css隐藏元素。我尝试在.row
和.span4
div 上重复,但无济于事。
似乎不仅角度改变了1.2,而且还有更好的方法。我创建了两个过滤器。我试图将它们合并为一个,但出现摘要错误。这是两个过滤器:
.filter("mySecondFilter", function(){
return function(input, row, numColumns){
var returnArray = [];
for(var x = row * numColumns; x < row * numColumns + numColumns; x++){
if(x < input.length){
returnArray.push(input[x]);
}
else{
returnArray.push(""); //this is used for the empty cells
}
}
return returnArray;
}
})
.filter("myFilter", function(){
return function(input, numColumns){
var filtered = [];
for(var x = 0; x < input.length; x++){
if(x % numColumns === 0){
filtered.push(filtered.length);
}
}
return filtered;
}
});
现在,html将如下所示:
<table border="1">
<tr data-ng-repeat="rows in (objects | myFilter:numColumns)">
<td data-ng-repeat="column in (objects | mySecondFilter:rows:numColumns)">{{ column.entry }}</td>
</tr>
</table>
jsFiddle :http :
//jsfiddle.net/W39Q2/
编辑2013年9月20日
在处理需要动态列的大量数据时,我想出了一种更好的方法。
HTML:
<table border="1">
<tr data-ng-repeat="object in (objects | myFilter:numColumns.length)">
<td data-ng-repeat="column in numColumns">{{ objects[$parent.$index * numColumns.length + $index].entry }}</td>
</tr>
</table>
Javascript:
$scope.objects = [ ];
for(var x = 65; x < 91; x++){
$scope.objects.push({
entry: String.fromCharCode(x)
});
}
$scope.numColumns = [];
$scope.numColumns.length = 3;
新过滤器:
.filter("myFilter", function(){
return function(input, columns){
var filtered = [];
for(var x = 0; x < input.length; x+= columns){
filtered.push(input[x]);
}
return filtered;
}
});
这使其具有动态性。要更改列,只需更改numColumns.length。在js小提琴中,您可以看到我已将其连接到一个下拉列表。
jsFiddle :http :
//jsfiddle.net/j4MPK/
您的html标记如下所示:
<div data-ng-repeat="row in rows">
<div data-ng-repeat="col in row.col">{{col}}</div>
</div>
然后可以在控制器中创建一个变量,如下所示:
$scope.rows = [
{col: [ 1,2,3,4 ]},
{col: [ 5,6,7 ]},
{col: [ 9,10,11,12 ]}
];
这样,您可以拥有任意数量的列。
jsfiddle http://jsfiddle.net/rtCP3/39/
编辑 我修改了小提琴,使其现在支持具有平面对象:
jsfiddle: http :
//jsfiddle.net/rtCP3/41/
html现在看起来像这样:
<div class="row" data-ng-repeat="row in rows">
<div class="col" data-ng-repeat="col in cols">
{{objects[$parent.$index * numColumns + $index].entry}}
</div>
</div>
然后在控制器中,我有:
$scope.objects = [
{entry: 'a'},
{entry: 'b'},
{entry: 'c'},
{entry: 'd'},
{entry: 'e'},
{entry: 'f'},
{entry: 'g'},
{entry: 'h'}
];
$scope.numColumns = 3;
$scope.rows = [];
$scope.rows.length = Math.ceil($scope.objects.length / $scope.numColumns);
$scope.cols = [];
$scope.cols.length = $scope.numColumns;
$ scope.numColumns变量用于指定每行中需要多少列。
要处理动态数组大小更改,请注意数组的长度(而不是整个数组,否则会多余)
$scope.numColumns = 3;
$scope.rows = [];
$scope.cols = [];
$scope.$watch("objects.length", function(){
$scope.rows.length = Math.ceil($scope.objects.length / $scope.numColumns);
$scope.cols.length = $scope.numColumns;
});
jsfiddle :http :
//jsfiddle.net/rtCP3/45/
问题内容: 我将Angular.js用于通过隐藏trs通过显示tr并在下面的td中将div向下滑动来模拟滑出效果的应用程序。遍历这些行的数组时,此过程可以使用knockout.js出色地工作,因为我可以在两个tr元素之间使用。 使用angular时,必须将其应用于html元素,这意味着我似乎无法使用标准方法来重复这些双行。我对此的第一个响应是创建一个表示这些double tr的指令,但是由于指令模
我已经开发了应用程序使用离子框架来显示客户当前的市场价格。我有问题在角js条件类与ng-重复循环。当市场发生变化时,我需要显示高(绿色)和低(红色)颜色,如果没有变化,以前的颜色应该为div显示,我使用了下面的代码查看 控制器: CSS 对于每一秒的速率将得到更新,所以若速率变得很高,那个么之前的速率应该应用css类。评分高颜色如果低意味着应用css类。rate highcolor else表示它
问题内容: 但是,这实际上只是一种变通方法,它实际上并未解决核心问题,即:如何在没有包装的情况下跨多个元素使用ng-repeat? 例如,jquery.accordion要求您重复h3和div元素,那么如何用ng-repeat做到这一点? 问题答案: 现在,我们对此有适当的支持,请参阅: AngularJs提交 通过此更改,您现在可以执行以下操作:
问题内容: 我正在尝试使用bootstrap 3和angularjs创建一个网格。 我要创建的网格就是这个,使用ng-repeat重复进行。 我试着用with 添加行,但这似乎行不通。任何建议都会很棒! 谢谢! 编辑:这是我最终使用的代码: 问题答案: 这是一个老答案! 撰写本文时,我对Angular还是有点陌生。Shivam下面有一个更好的答案,我建议您改用它。它使表示逻辑不会进入您的控制器
问题内容: 我正在尝试使用条件将项目分组为ng-repeat。 一个示例条件是将所有元素分组为同一小时。 数据: “时间”字段实际上是一个时间戳记(1399372207),但是使用准确的时间,示例输出将更易于理解。 我正在使用ng-repeat列出这些项目: 还尝试了: 有效输出为: 如果没有针对我的问题的简单解决方案,我的最后选择是将数据分组,然后将其分配给ng-repeat中使用的作用域变量。
问题内容: 嘿,我有这段代码: 它可以工作,但是我想在循环中添加一些额外的条件,例如: 我怎样才能做到这一点? 问题答案: 使用(或): 附加到元素,这将决定是否显示它。 ng- if的 文档可以在此处找到。 但是,如果只想在循环第一个或最后一个项目时执行某项操作,则也可以使用和的属性。这些已用ng- repeat记录 。可以这样使用: