gpt4 book ai didi

javascript - 在 Angular 和 ionic 中使用嵌套的 ng-repeat 加载大型数据集

转载 作者:行者123 更新时间:2023-11-30 12:11:37 25 4
gpt4 key购买 nike

我正在加载一个主 ng-repeat,它有两个嵌套的 ng-repeat 和一个大数据集。显示父记录的想法。然后用户可以点击父记录以查看二级详细信息。然后用户可以在第 2 级再次标记以查看更多详细信息。总共有三个 ng-repeats。

当 Angular 将数据绑定(bind)到 DOM 元素时,屏幕会卡住几秒钟。

我需要以某种方式解决这个问题,以免它卡住。我认为我的选择是子重复的分页或按需加载。后端是一个sqlite数据库。

这是 plunkr http://embed.plnkr.co/NdipQQO2XiCGoIr00mGH/ :

<!DOCTYPE html>
<html>

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title></title>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="ionic.css">
<script src="http://code.ionicframework.com/1.0.0-beta.11/js/ionic.bundle.min.js"></script>
<script src="script.js"></script>
</head>

<body ng-app='todo'>
<ion-pane>
<ion-content ng-controller="MyCtrl" padding="false" class="has-header">
<div class="bg-overlay"></div>
<div class="content-wrap">

<div class="container padding" style="background-color: #fff;" ng-show="gridData.length > 0">
<div class="row">
<div class="col col-75" style="font-weight: bold !important;">
Department / Product Type
</div>
<div class="col col-25" style="font-weight: bold !important;">
Qty
</div>
</div>

<div ng-repeat="item in gridData | orderBy:'-qty'" style="padding:0px;margin: 0;" ng-init="show = false">
<div class="row" ng-class-odd="'odd'" ng-class-even="'even'">
<div class="col col-75" style="padding:0;margin:0;" ng-click="show = !show">
{{item.departmentName}} - {{item.productTypeName}} (Click here)
</div>
<div class="col col-25" align="center" valign="middle" style="font-size: 14px;font-weight:bold;padding:0;margin:0;">
{{item.qty}}
</div>
</div>
<div ng-repeat="style in item.styles" style="padding:0;margin: 0;border: 1px solid #eee;" ng-show="show" ng-init="show2 = false">
<div class="row">
<div class="col" style="margin-left: 5% !important;border-top-width:0;border-bottom-width:0;" ng-click="show2 = !show2">
{{style.styleNum}} ({{style.qty}}) (Click here)
</div>
</div>
<div class="row" ng-show="show2">
<div class="col col-5" style="border:0"></div>
<div class="col col-5" style="border-left:0;border-bottom:0;border-right:0;"></div>
<div class="col col-25"><b>Color</b></div>
<div class="col col-15"><b>Size</b></div>
<div class="col"><b>Product#</b></div>
</div>
<div ng-repeat="styleLine in style.details" ng-show="show2">
<div class="row">
<div class="col col-10" style="border:0;"></div>
<div class="col col-25">{{styleLine.color}} ({{styleLine.qty}})</div>
<div class="col col-15">{{styleLine.size}}</div>
<div class="col">{{styleLine.productNum}}</div>
</div>
</div>

</div>
</div>
</div>
</div>
</ion-content>
</ion-pane>

</body>

</html>

JS(我省略了数据部分,因为它太大而无法粘贴。它在可用的 plunkr 中)

angular.module('todo', ['ionic'])
.controller('MyCtrl', function($scope) {
$scope.gridData = ...
});

plunkr 在不卡住屏幕的情况下工作正常。但是在我的 iPod 上它会卡住,而且如果我有 10.000 个项目,这个解决方案显然不会很好地扩展。

当用户单击标题以查看子详细信息时,如何通过使用分页或按需加载数据来解决此问题,而无需再次重新绑定(bind)整个网格?使用按需加载时,我最好只获取该特定父项的详细信息,并以某种方式动态插入 ng-repeat,而不必再次重新加载所有内容。希望这是有道理的。

最佳答案

Angular 为您在 html 中的表达式创建观察者,众所周知,一次超过 2000 个 watxhers 会对性能产生非常糟糕的影响,我不知道您使用的数据如何,显然您达到了 2000 个标记,所以我们需要减少你拥有的观察者数量。让我们开始将您必须的每个 ng-show 替换为 ng-如果它可以快速提高您的性能,其次,您应该考虑是否可以在您的代码中进行一次性绑定(bind),使用一次绑定(bind),如 {{::expression }}它不会创建一个新的观察者,如果你有一些你绑定(bind)的值并且它们不应该在运行时改变你应该使用一次性绑定(bind),最后但并非最不重要的一点是,当您使用 ng-repeat 时始终使用“按 $index 跟踪”,如果您重复列表是交互式的,这会对性能产生巨大影响,您应该在此处阅读更多信息 - https://docs.angularjs.org/api/ng/directive/ngRepeat

祝你好运!

关于javascript - 在 Angular 和 ionic 中使用嵌套的 ng-repeat 加载大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612888/

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