ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ng-table数据加载完全指南:托管数组、延迟加载与服务端分页3种模式一文掌握

ng-table数据加载完全指南:托管数组、延迟加载与服务端分页3种模式一文掌握 ng-table数据加载完全指南托管数组、延迟加载与服务端分页3种模式一文掌握【免费下载链接】ng-tableSimple table with sorting and filtering on AngularJS项目地址: https://gitcode.com/gh_mirrors/ng/ng-table在 AngularJS 项目中ng-table 数据加载是最容易踩坑的环节。ng-table 通过核心类NgTableParams管理表格数据官方提供了 3 种加载模式托管数组Managed Array、延迟加载Lazy Loading与服务端分页External Array。本文带你一文掌握这 3 种 ng-table 数据加载模式的原理、适用场景与选型建议新手看完即可上手。1. 先搞懂核心NgTableParams 如何驱动表格ng-table 的排序、过滤、分页能力都由一个参数对象驱动——NgTableParams。你可以把它理解为表格的大脑用户点击表头排序 → 更新sorting参数用户输入过滤条件 → 更新filter参数用户翻页 → 更新page/count参数参数变化后ng-table 会自动触发重新取数。因此数据从哪里来完全由你在初始化时交给它的配置决定这也是 3 种模式的分叉点。核心实现位于 src/core/ngTableParams.ts默认的取数逻辑在 src/core/data/ngTableDefaultGetData.ts 中它会依次执行过滤 → 排序 → 分页三步最后把当前页的切片交给表格渲染。官方文档对该过程的说明见 demo-site/views/loading/overview.html。2. 模式一托管数组Managed Array——最省心的入门方案适用场景数据量不大几千行以内、一次性就能拿到的本地数据比如下拉选项、配置列表。玩法直接把一个内存数组通过dataset选项交给NgTableParams后续的过滤、排序、分页全部由 ng-table 在浏览器端自动完成你一行逻辑都不用写。var dataset [{ name: christian, age: 21 }, { name: anthony, age: 88 }]; var tp new NgTableParams({}, { dataset: dataset });这是最推荐的起步方式。仓库中的 TypeScript 示例 demo-apps/ts-webpack/src/my-table/my-table.component.ts 就是这样做的把demoData数组丢给dataset表格立即可用。交互式演示可参考 demo-site/views/loading/demo-managed-array.html。 提示托管数组模式下过滤和排序发生在内存中所以数据再大也不会变慢——变的只是浏览器内存和渲染开销。3. 模式二延迟加载Lazy Loading——数据晚到也不怕适用场景数据在页面初始化时尚未就绪比如需要从本地 API 异步拉取 JSON 文件但量级仍可控、希望由 ng-table 负责过滤排序。玩法先创建NgTableParams等异步数据返回后再通过dataset()方法把数组补进去ng-table 会自动重新取数并渲染var tp new NgTableParams({}, {}); // 先建空表格 $http.get(data.json).then(function (resp) { tp.dataset(resp.data); // 数据到达后注入 });与托管数组相比多了一个数据晚到的时序问题所以它叫延迟加载的托管数组。你可以把表格 UI 先渲染出来显示空态数据一到再刷新用户体验更流畅。完整示例见 demo-site/views/loading/demo-lazy-loaded.html。4. 模式三服务端分页External Array——大数据量的正解适用场景数据量大数万行以上、或数据必须由后端按条件实时计算的场景。此时客户端过滤排序分页已经不现实需要交给服务器。玩法不再传dataset而是自定义一个getData函数。每当用户翻页、排序、过滤ng-table 都会带着最新的参数调用它你负责发起 HTTP 请求拿到结果后调用params.total(总数)告知总条数分页器靠它计算总页数只返回当前页的数据行var tp new NgTableParams({}, { getData: function (params) { return api.query(params).then(function (data) { params.total(data.inlineCount); return data.results; // 仅返回当前页 }); } });⚠️ 关键点total()必须设置否则分页器不知道总页数翻页按钮会失效或显示异常。这是服务端分页模式最高频的 bug 来源。服务端分页模式下过滤、排序条件会作为查询参数发到后端params.filter()、params.orderBy()可读取因此需要后端接口配合支持。演示见 demo-site/views/loading/demo-external-array.html。5. 3 种模式对比一张表帮你做选型模式数据来源过滤/排序/分页由谁执行适用数据量后端配合托管数组内存数组datasetng-table浏览器几千行内不需要延迟加载异步获取后注入的数组ng-table浏览器几万行内可选服务端分页getData函数返回后端服务无上限必须选型口诀数据已在手 →托管数组✅数据晚到但不大 →延迟加载✅数据很大或需实时查询 →服务端分页✅6. 常见问题 FAQQ1能先延迟加载、数据变大后再切换成服务端分页吗可以。两种模式本质只是初始化配置不同重构时把dataset换成getData即可UI 模板无需改动。Q2过滤后总条数变了分页器会自动更新吗托管数组/延迟加载模式会自动默认取数逻辑会重新设置total见 src/core/data/ngTableDefaultGetData.ts服务端分页模式必须在getData中手动调用params.total()。Q3ES5 老项目怎么用ng-table 完全兼容 ES5参考 demo-apps/es5/src/my-table.component.js 的写法模式与本文一致。7. 小结ng-table 数据加载的 3 种模式可以归纳为一句数据在哪取数逻辑就写在哪儿。托管数组最省心、延迟加载最灵活、服务端分页最能扛量。掌握NgTableParams这个核心后切换模式只是换个配置的事。动手试试吧【免费下载链接】ng-tableSimple table with sorting and filtering on AngularJS项目地址: https://gitcode.com/gh_mirrors/ng/ng-table创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表