Javascript Angular.js更复杂的条件循环
我们的目标是创建这个Javascript Angular.js更复杂的条件循环,javascript,loops,angularjs,angularjs-ng-repeat,Javascript,Loops,Angularjs,Angularjs Ng Repeat,我们的目标是创建这个 <h3>11.4.2013</h3> <ul> <li>entry 1</li> <li>entry 2</li> <li>entry 3</li> </ul> <h3>10.4.2013</h3> <ul> <li>entry 4</li> <li>entry 5<
<h3>11.4.2013</h3>
<ul>
<li>entry 1</li>
<li>entry 2</li>
<li>entry 3</li>
</ul>
<h3>10.4.2013</h3>
<ul>
<li>entry 4</li>
<li>entry 5</li>
<li>entry 6</li>
</ul>
问题是ng repeat必须在li
上,所以我永远无法使用ng repeat来实现这一点,对吗?我从Mark Rajnoc那里找到了这个例子,但它仍然非常有限
我还有什么选择?写我自己的ng重复指令?或者有没有其他不写的方法呢?您可以编写自己的过滤器,过滤掉外部ng重复的唯一日期,例如:
过滤器('unique',函数(){
返回函数(项目、字段){
var ret=[],found={};
对于(项目中的var i){
var项目=项目[i][field];
如果(!找到[项目]){
找到[项目]=真;
重新推送(项目[i]);
}
}
返回ret;
}
});
使用以下标记:
{{dateItem.date}
-
{{item.name}
看看——或者这个
然而,如果你有很多物品(成百上千),这个解决方案不是最理想的。另一种方法是创建更优化的数据结构。您甚至可以通过添加$watch使其与原始数据结构配合使用,例如:
$scope.$watch('items',function()){
var itemDateMap={};
对于(var i=0;i当我有与您相同的需求时,我使用对象而不是数组
<div ng-repeat="item in data">
<h1>{{item.date}}</h1>
<ul ng-repeat="name in item.names">
<li>{{name}}</li>
</ul>
</div>
{{item.date}
- {{name}}
这个问题页会帮助你
让我们从另一个角度来看这个问题。如果你不使用Angular,你会怎么做?是否可以在不转换数据的情况下以你想要的方式显示它?如果我不使用Angular,我会这样做或类似的方式等等,因为什么时候你可以使用ng repeat作为一个元素?无论如何,这在性能方面是如何的?转换不是更好像这样管理init上的数据结构?还有一件很重要的事情是,我将在运行中编辑和添加新条目..添加肯定有效我仍然有点担心性能..抱歉,你不能使用ng repeat作为元素。但是你可以将它用于任何元素,所以它都有效-但这是一个糟糕的例子。我有将其设置为div。从性能角度看,您应该可以,除非您有一个非常大的集合。如果您不介意一个新的数据结构,您可以在init函数中进行转换。但使用我的方法,您不必这样做,并且可以轻松地向原始集合添加更多项-。Ha:)嗯,可能会有多达..400个条目..每个条目上都会有额外的过滤器..而且那个日期也有时间,所以我不能轻易地过滤条目..我只接受你的答案,这对我没有什么帮助,但可能是我问的正确答案。问题是你a)无法对对象进行排序b)无法轻松地将()推入其中。除此之外,它与我在这里描述的转换类似,但不确定在编辑或添加新项时是否能正常工作(无需再次重建整个数组/对象)。。
<div ng-repeat="item in data">
<h1>{{item.date}}</h1>
<ul ng-repeat="name in item.names">
<li>{{name}}</li>
</ul>
</div>