尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

让ng-table表格可编辑:内联行编辑与批量编辑2种模式的实战教程

让ng-table表格可编辑:内联行编辑与批量编辑2种模式的实战教程 让ng-table表格可编辑内联行编辑与批量编辑2种模式的实战教程【免费下载链接】ng-tableSimple table with sorting and filtering on AngularJS项目地址: https://gitcode.com/gh_mirrors/ng/ng-tableng-tableGitHub 加速计划 / ng / ng-table是一个基于 AngularJS 的简单表格指令内置了排序、过滤、分页等能力。默认情况下表格只负责展示数据但通过模板层面的小技巧你可以轻松让 ng-table 表格可编辑支持内联行编辑和批量编辑两种模式满足从改一个格子到一次改几十行的全部需求。本教程不依赖任何第三方插件纯模板 作用域绑定即可实现。一、为什么 ng-table 天生适合做可编辑表格ng-table 的核心机制是表格内容仍然由你自己的td模板渲染指令只负责数据分页、排序后的$data列表以及表头生成。这意味着单元格里写{{user.name}}就显示文本单元格里写input ng-modeluser.name就变成一个可编辑输入框。也就是说可编辑不是替换 ng-table而是替换td内部的模板内容。编辑后的值会直接写回数据对象配合 AngularJS 的ng-model双向绑定自动生效无需手动同步。官方演示站把编辑能力单独归为 Editing data 章节包含两个示例页demo-inline.html内联行编辑与 demo-batch.html批量表格编辑菜单定义见 app.js。指令本身的渲染逻辑在 ngTable.directive.ts数据行识别规则在 ngTableController.ts 中维护读一下这两个文件有助于理解为什么改了td内容表格还能正常排序分页。二、模式 1内联行编辑点哪改哪内联行编辑Inline row editing是最常用的形态平时单元格显示纯文本用户点击某一行或某个单元格后该行的单元格切换为输入框编辑完成后再点一次即恢复显示。适合大多数行只读、偶尔改一行的场景。实现步骤给行加一个编辑中状态。在控制器里维护一个isEditing标志或记录正在编辑的行点击行时切换它。td内用ng-if在文本和输入框之间切换例如姓名列平时渲染{{user.name}}编辑状态渲染input ng-modeluser.name。用row-class高亮当前编辑行。ng-table 支持row-class属性指向一个函数函数根据行返回 CSS 类名如editing再配合几行样式就能让正在编辑的行明显区别于其他行。加一个保存/取消按钮保存时调用你的接口提交数据取消时恢复原值或直接切出编辑态。以项目内的 ES6 示例应用 my-table.component.html 为基础模板即可改造数据可参考 demo-data.ts。内联编辑的两个小技巧失焦即保存在输入框上监听blur或ng-model-options防抖用户改完直接点下一格就自动提交交互更顺滑。数字列用typenumber年龄、金额等列绑定数值模型时用数字输入框可避免脏数据。三、模式 2批量编辑一次改多行批量编辑Batch table editing指表格进入编辑态后所有可见行同时可编辑改完后点一个保存全部按钮统一提交。适合数据录入、批量调价、批量更新状态等成批修改场景。官方示例页见 demo-batch.html。实现步骤控制是否处于批量编辑态控制器中放一个isBatchEditing标志表头放一个编辑 / 完成切换按钮。所有td同时切换为输入框和内联模式同理只是切换条件换成isBatchEditing一行模板改动即可让整页数据同时可编辑。统一保存因为输入框直接ng-model绑定到数据行切换按钮点击时控制器里已拿到所有已修改的值一次性调用保存接口即可接口失败时可提示用户哪些行未保存。相比内联模式批量模式少了点哪行编辑哪行的切换逻辑模板反而更简单——核心就是一个全局布尔值驱动整页输入框的显隐。四、两种模式怎么选对比维度内联行编辑批量编辑典型场景偶尔修改个别行录入 / 成批更新视觉噪音小只有一行变输入框大整页都是输入框保存逻辑保存单行一次性提交全部出错影响面一行多行建议先做校验模板复杂度中行级状态低全局状态 经验法则数据量大、修改频率低选内联一次性录入几十条、需要整体确认选批量。两者也可以共存——同一张表先点批量编辑进入整页输入态对个别行再点行内编辑做微调。五、注意事项与常见问题排序/分页不会丢编辑ng-table 的排序、过滤基于数据源重算$data而输入框绑定的是数据对象本身所以编辑态下翻页、排序后回到原页值依然保留。select也能用下拉框、复选框同样是换掉td内容的思路官方过滤模板目录 src/browser/filters/ 里就有 select 模板写法可借鉴。别忘了校验批量提交前建议遍历数据行做必填/范围检查比让后端逐个报错体验好得多。只读列保持只读给不需要修改的列如 ID、创建时间不切换模板只有业务列变输入框。六、动手上手的推荐路径先跑通基础表格参考 demo-apps/es5 或 demo-apps/ts-webpack 示例应用安装方式见 README.md在td里把纯文本换成输入框体验 ng-model 即时生效加一个isEditing标志实现内联行编辑再把标志改成全局isBatchEditing加上保存全部按钮完成批量编辑。整个过程不引入新依赖核心改动集中在表格模板的td区域和控制器里的一两个布尔标志——这正是 ng-table 把渲染权交还给用户模板所带来的灵活性。【免费下载链接】ng-tableSimple table with sorting and filtering on AngularJS项目地址: https://gitcode.com/gh_mirrors/ng/ng-table创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表