gpt4 book ai didi

angularjs - Angular js中嵌套对象的分页

转载 作者:行者123 更新时间:2023-12-01 01:48:41 25 4
gpt4 key购买 nike

我从 Angular 开始,我有一个我想分页的嵌套对象。要分页的项目是给定对象中的一些“属性”。 queuelist 对象嵌套在数组中的数组中。任何帮助,将不胜感激。
非分页数据的 plunker 链接是:

https://plnkr.co/edit/zgo0msd6y5ba6DJ6qGlc?p=preview

应用程序.js:

var app = angular.module("myApp",[])
.controller("mycontroller",['$scope',function($scope){

$scope.queuelist = [
{
"name": "ONE",
"QueueList": [
{
"id": 1,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:64"
},
{
"id": 2,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:65"
},
{
"id": 3,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:66"
}
],
"$$hashKey": "object:59"
},
{
"name": "TWO",
"QueueList": [
{
"id": 4,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:72"
},
{
"id": 5,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:73"
},
{
"id": 6,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:74"
},
{
"id": 7,
"attributes": {
"a": 1,
"b": "2017-07-25T12:57:06Z",
"c": 1500967626000,
"d": "asdasd",
"e": "aasdasdasd",
"f": 0
},
"$$hashKey": "object:75"
}
],
"$$hashKey": "object:60"
}
];


$scope.objects = [];


/*
for(i=0;i<$scope.data.length;i++){
$scope.data2.push($scope.data[i].QueueList);
};
*/

for(i=0;i<$scope.queuelist.length;i++){
for(j=0;j<$scope.queuelist[i].QueueList.length;j++){
$scope.objects.push($scope.queuelist[i].QueueList[j].attributes);
};
};
}])

和 index.html:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script type= "text/javascript" src= "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>
<script type= "text/javascript" src= "app.js"></script>
<style>
table, td, th {
border: 1px solid #ddd;
text-align: left;
}

table {
border-collapse: collapse;
width: 100%;
}

th, td {
padding: 15px;
}
</style>
</head>
<body>
<div ng-controller="mycontroller">

<div ng-repeat="queueJob in queuelist">
{{queueJob.name}}
<table>
<thead>
<tr>
<th><b>a</b></th>
<th><b>b</b></th>
<th><b>c</b></th>
<th><b>e</b></th>
<th><b>f</b></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="queue in queueJob.QueueList">
<td>{{queue.attributes.a}}</td>
<td>{{queue.attributes.b}}</td>
<td>{{queue.attributes.c}}</td>
<td>{{queue.attributes.e}}</td>
<td>{{queue.attributes.f}}</td>
</tr>
<br/><br/>
</tbody>
</table>
<br/><br/>
<br/><br/>
</div>

</div>
</body>
</html>

最佳答案

您可以使用以下组合来执行此操作:

  • 自定义过滤器(确定要跳过多少条记录),以及...
  • 内置limitTo过滤器(将记录数限制为所需的页面大小)

  • 1)首先创建自定义过滤器。
    app.filter("startFrom", function thisFilter() {
    return function(input, index) {
    return input.slice(parseInt(index));
    };
    });

    过滤器接收 index它继续在 Array.prototype.slice() 中使用方法。 slice()方法在给定索引处对数组进行切片并返回一个包含所有剩余对象的新数组。过滤器返回新数组。

    2) 使用ng-repeat 中的自定义过滤器和内置limitTo 过滤器指示。
    <tr ng-repeat="queue in queueJob.QueueList | startFrom: queueJob.pageIndex | limitTo: 1">

    这里我们使用新创建的 startFrom自定义过滤器将其传递给 queueJob.pageIndex属性作为过滤器的 index范围。我们传递 startFrom 的结果过滤到 limitTo将记录数减少到 1 的过滤器.

    备注 : 我们必须使用 pageIndex queueJob 上的属性(property)迭代变量,因为这个 ng-repeat包含在另一个 ng-repeat 中等等 $scope.pageIndex变量会发生冲突并随后被覆盖。

    3) 创建下一个和上一个按钮
    <tr>
    <td colspan="5">
    <button class="btn"
    ng-click="onPrevClicked(queueJob)"
    ng-disabled="isFirst(queueJob)">
    <span class="fa fa-chevron-left"></span>
    Prev
    </button>
    <button class="btn"
    ng-click="onNextClicked(queueJob)"
    ng-disabled="isLast(queueJob)">
    Next
    <span class="fa fa-chevron-right"></span>
    </button>
    Page {{ queueJob.pageIndex + 1 }}
    </td>
    </tr>

    这里我们使用 ng-click指令来调用 Controller 函数,增加/减少 queueJob对象的 pageIndex属性(property)。我们还使用 ng-disabled如果用户在第一条/最后一条记录上,则防止导航下一条/上一条的指令。

    4) 在 Controller 中创建可绑定(bind)函数
    $scope.onPrevClicked = onPrevClicked;
    $scope.onNextClicked = onNextClicked;
    $scope.isFirst = isFirst;
    $scope.isLast = isLast;

    function onPrevClicked(obj) {
    if (!isFirst(obj)) obj.pageIndex--;
    }

    function onNextClicked(obj) {
    if (!isLast(obj)) obj.pageIndex++;
    }

    function isFirst(obj) {
    return obj.pageIndex === 0;
    }

    function isLast(obj) {
    return obj.pageIndex + 1 === obj.QueueList.length;
    }

    5) 初始化pageIndex预付款
    $scope.queuelist.forEach(function(obj) {
    obj.pageIndex = 0;
    });

    这初始化了 pageIndex作为一个可以递增并随后递减的数字。

    演示

    CodePen: Using a custom filter to do pagination

    关于angularjs - Angular js中嵌套对象的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46274943/

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