ng-repeat 的问题,AngularJS 循环
我在 Angular js(离子 1 应用程序)中使用 ng-repeat 创建此循环结构时遇到问题。当我使用 ng-repeat 时,每个循环中的每个事件都会重复显示日期。但是我只想为相应的事件显示一次日期,如图所示。
我在 Angular js(离子 1 应用程序)中使用 ng-repeat 创建此循环结构时遇到问题。当我使用 ng-repeat 时,每个循环中的每个事件都会重复显示日期。但是我只想为相应的事件显示一次日期,如图所示。
您需要一个groupBy过滤器,您可以(手动编写,或)从angular-filter模块获取。只需设置一个 JSON 与一起列出的事件和日期。这是一个小演示,您可以根据示例进行调整:
var app = angular.module('myApp', ['angular.filter']);
app.controller('myCtrl', function($scope) {
$scope.events = [{
"date": "Sept-1",
"event": "Event 1"
},
{
"date": "Sept-1",
"event": "Event 2"
},
{
"date": "Sept-2",
"event": "Event 3"
},
{
"date": "Sept-2",
"event": "Event 4"
},
{
"date": "Sept-3",
"event": "Event 5"
},
]
});
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.17/angular-filter.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<div ng-repeat="(key, value) in events | groupBy: 'date'">
- {{key}}
<div ng-repeat="val in value">
* {{val.event}}
</div>
<br>
</div>
</div>
</body>
</html>
您可以*使用两个 ng-repeat,一个用于日期,另一个内部 ng-repeat 用于日期下列出的每个事件。例如:
<div ng-repeat="date in $ctrl.dates">
{{date}}
<div ng-repeat="event in $ctrl.events[date]">
<div>event</div>
</div>
</div>
我不知道你的数据结构是什么样的,但你可以很容易地适应它。
*由于使用 groupBy 的其他答案而更新。这个答案很好用。我个人不喜欢使用 groupBy 过滤器,而是选择两个协同工作的数据模型。
另一种方法是创建一个函数,该函数仅在日期与前一个日期不同时才返回日期:
$scope.dateIfNew = function(index) {
var event = $scope.events[index];
if (index == 0) return event.date;
var prevEvent = $scope.events[index-1];
if (event.date != prevEvent.date) return event.date;
//else
return "";
};
这仅使用一个ng-repeat
. 它避免了嵌套的额外性能开销,ng-repeat
并避免使用第三方库。
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.dateIfNew = function(index) {
var event = $scope.events[index];
if (index == 0) return event.date;
var prevEvent = $scope.events[index-1];
if (event.date != prevEvent.date) return event.date;
//else
return "";
};
$scope.events = [{"date": "Sept-1","event": "Event 1"},
{"date": "Sept-1","event": "Event 2"},
{"date": "Sept-2","event": "Event 3"},
{"date": "Sept-2","event": "Event 4"},
{"date": "Sept-3","event": "Event 5"},
]
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="myApp" ng-controller="myCtrl">
<table>
<tr ng-repeat="item in events">
<td>
<b>{{dateIfNew($index)}}</b>
</td>
<td>{{item.event}}</td>
</tr>
</table>
</body>