AngularJS中使用ng-repeat的index
AngularJS中的ng-repeat中,隐含的index,可以使用$index来访问,也可以自己指定index对应的变量名。 - 使用隐含的index变量
隐含的index变量名是index,可以使用$index来访问。
// 定义module和controller var site = angular.module(application.site, []); site.controller(MainController, [$scope, $http, function ($scope, $http) { $scope.users = [ {name:"xialei",posts:["post一","post二","post三"]}, {name:"zhangsan",posts:["post四","post五"]} ]; }]);
下面在html页面内使用controller和定义的collection对象。
<div ng-controller="MainController"> <dl ng-repeat="user in users"> <dt ng-init="p_index=$index">Name:{ { user.name }}</dt> </dl> </div>
这里使用了$index,这是AngularJS提供的隐含的collection对象的index变量量。
-
指定index变量名 在ng-repeat中可以自己指定index的变量名称,并在随后使用。比如下面代码中,定义了times的index变量名称timeIndex (为tr 元素), 为days的遍历操作,定义了dayIndex的索引变量。
<tr data-ng-repeat="(timeIndex, time) in times"> <td style="text-align: center; width: 12.5%;" data-ng-style="doGetTimeColumnStyle($index)">{ {time}}</td> <td data-ng-repeat="(dayIndex, day) in days" data-ng-click="selectDatetimeSlot(dayIndex, day, timeIndex, time)"> <button class="popupWindow" data-ng-if="datetimeSlots[dayIndex][timeIndex].status && datetimeSlots[dayIndex][timeIndex].status != AVAILABLE && datetimeSlots[dayIndex][timeIndex].status != EXPIRED && datetimeSlots[dayIndex][timeIndex].mode != ONE_V_MANY" data-ng-class="datetimeSlots[dayIndex][timeIndex].displayStatus | lowercase" data-placement="{ {doGetTimeColumnPopOverPlacement(dayIndex, timeIndex)}}" data-animation="am-flip-x" data-trigger="focus" data-bs-popover data-template="partials/timeSlotPopover.html"> { {datetimeSlots[dayIndex][timeIndex].displayStatus}} { {datetimeSlots[dayIndex][timeIndex].stdName}} </button>
ps: $index是angular 内针对ng-repeat提供的隐含index变量名称,如果在ng-repeat嵌套使用时,index名称会发生冲突及覆盖。这是也应该使用自定义的变量名。 下面例子中父级的index使用ng-init,定义了p_index来指定为parent index。
<div ng-controller="MainController"> <dl ng-repeat="user in users"> <dt ng-init="p_index=$index">Name:{ { user.name }}</dt> <dd ng-repeat="p in user.posts">Parent index:{ { p_index }} - { { p }} self Index:{ { $index }} </dd> </dl> </div>