gpt4 book ai didi

javascript - Angular.js 更复杂的条件循环

转载 作者:行者123 更新时间:2023-12-02 07:03:46 41 4
gpt4 key购买 nike

目标是创造这个

<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>

由此

[
{
"name": "entry1",
"date": "11.4.2013"
},
{
"name": "entry2",
"date": "11.4.2013"
},
{
"name": "entry3",
"date": "11.4.2013"
},
{
"name": "entry4",
"date": "10.4.2013"
},
{
"name": "entry5",
"date": "10.4.2013"
},
{
"name": "entry6",
"date": "10.4.2013"
}
]

问题是 ng-repeat 必须在 li 上,所以我永远无法使用 ng-repeat 做到这一点,对吗?我找到了这个 http://jsfiddle.net/mrajcok/CvKNc/来自 Mark Rajnoc 的示例,但它仍然非常有限..

我还有什么其他选择?编写我自己的 ng-repeat 类指令?还是有另一种不用写的方法?

最佳答案

您可以编写自己的过滤器来过滤掉外部 ng-repeat 的唯一日期,例如:

filter('unique',function(){
return function(items,field){
var ret = [], found={};
for(var i in items){
var item = items[i][field];
if(!found[item]){
found[item]=true;
ret.push(items[i]);
}
}
return ret;
}
});

带有以下标记:

<div ng-repeat="dateItem in items | unique:'date' | orderBy:'date'">
<h3>{{dateItem.date}}</h3>
<ul>
<li ng-repeat="item in items | filter:dateItem.date">
{{item.name}}
</li>
</ul>
</div>

看看this working plnkr example -- 或者这个 updated example with adding items

但是,如果您要处理大量元素(成百上千),则此解决方案不是最佳选择。另一种方法是创建一个更优化的数据结构。你甚至可以通过添加一个 $watch 来让它与你的原始数据结构一起工作——比如:

$scope.$watch('items',function(){
var itemDateMap = {};

for(var i=0; i<$scope.items.length; i++){
var item = $scope.items[i], key = item.date;
if(!itemDateMap[key]){
itemDateMap[key] = [];
}
itemDateMap[key].push(item);
}

$scope.itemDateMap=itemDateMap;


},true);

使用此标记:

<div ng-repeat="(date,subItems) in itemDateMap">
<h3>{{date}}</h3>
<ul>
<li ng-repeat="item in subItems">
{{item.name}}
</li>
</ul>
</div>

Here is an example您可以在其中添加很多随机项目。

关于javascript - Angular.js 更复杂的条件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943193/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com