推荐一个非常好用的表格组件 - AG Grid

一、前言

最近在做一个线上订货平台的项目,用户之前都是使用传统的Excel表格完成工作数据的提交和汇总,工作效率非常低。

希望我们能将历年的各项数据导入系统,之后可以参照历年数据格式,能直接在系统上创建新的工作,并进行管理。

在项目中,我们需要尽可能的将数据以表格的形式呈现,从而最大程度还原用户熟悉的工作操作。

重新开发一套表格组件所使用的时间和精力相对来说是非常大的,为了能尽快将成果完美的呈现给用户,我们选择了AG-Grid这个号称最强的表格组件。

接下来简单记录下AG-Grid的使用经验,方便大家参考。

二、介绍

AG-Grid是一个高级数据网格,适用于JavaScript / TypeScript应用程序。AG-Grid没有其他依赖项,不需要提前加载 Vue 或 React 或 Angular,甚至不使用 JQuery、Undercore 或 LoDash。没有依赖性意味着AG-Grid可以与任何框架一起工作。

它是一种功能强大、灵活且具有高度可定制性的表格解决方案,提供了丰富的特性,如排序、过滤、分组、编辑、无限滚动、行拖动、分组等,甚至可以和桌面Excel文件之间进行复制粘贴,多选数据后即时生成图表等强大功能。

且开源免费!!!

三、获取

  1. Github 地址:https://github.com/ag-grid/ag-grid
  2. 官方文档地址:https://www.ag-grid.com/
  3. 中文文档地址:https://www.itxst.com/ag-grid/tutorial.html

1. Vue环境

  1. 使用 npm 安装 ag-grid-vue3
    npm install ag-grid-vue3
    
  2. 引入并注册到组件
    <template></template>
    
    <script>
    import { ref } from 'vue';
    import "ag-grid-community/styles/ag-grid.css";
    import "ag-grid-community/styles/ag-theme-quartz.css";
    import { AgGridVue } from "ag-grid-vue3";
    
    export default {
      name: "App",
      components: {
        AgGridVue,
      },
      setup() {},
    };
    </script>
    
  3. 定义行列数据
    setup() {
      // 行数据:要显示的数据
      const rowData = ref([
        { make: "Tesla", model: "Model Y", price: 64950, electric: true },
        { make: "Ford", model: "F-Series", price: 33850, electric: false },
        { make: "Toyota", model: "Corolla", price: 29600, electric: false },
      ]);
    
      // 列定义:定义要显示的列
      const colDefs = ref([
        { field: "make" },
        { field: "model" },
        { field: "price" },
        { field: "electric" }
      ]);
    
      return {
        rowData,
        colDefs,
      };
    },
    
  4. 使用 Grid 组件,配置 rowData 和 columnDefs 属性,为表格提供数据
    <template>
      <ag-grid-vue
        :rowData="rowData"
        :columnDefs="colDefs"
        style="height: 500px"
        class="ag-theme-quartz"
      >
      </ag-grid-vue>
    </template>
    

2. JavaScript环境

  1. 提供容器
    • 引入AG-Grid库文件,并创建一个空白div
    <html lang="en">
      <head>
        <script src="https://cdn.jsdelivr.net/npm/ag-grid-community/dist/ag-grid-community.min.js"></script>
      </head>
      <body>
        <div id="myGrid"></div>
      </body>
    </html>
    
  2. 创建实例
    • 创建实例,并将空白div传入
    const gridOptions = {};
    
    const myGridElement = document.querySelector('#myGrid');
    // 创建实例,传入容器 和 Grid 配置对象
    agGrid.createGrid(myGridElement, gridOptions);
    
  3. 定义行和列
    // Grid 配置对象
    const gridOptions = {
      // 行数据:要显示的数据
      rowData: [
        { make: "Tesla", model: "Model Y", price: 64950, electric: true },
        { make: "Ford", model: "F-Series", price: 33850, electric: false },
        { make: "Toyota", model: "Corolla", price: 29600, electric: false },
      ],
      // 列定义:定义要显示的列
      columnDefs: [
        { field: "make" },
        { field: "model" },
        { field: "price" },
        { field: "electric" }
      ]
    };
    
  4. 添加样式
    • 通过class设置表格主题:ag-theme-quartz
    <div id="myGrid" class="ag-theme-quartz" style="height: 500px"></div>
    

3. 其他方式

  1. React:https://ag-grid.com/react-data-grid/getting-started/
  2. Angular:https://ag-grid.com/angular-data-grid/getting-started/

四、最后

AG-Grid真的是一个功能强大的数据表格,借用官网上的一句话作为结束:

The Best JavaScript Grid in the World

好的,下面是一个简单的原生表格组件的实现: ```html <!-- HTML结构 --> <table id="my-table"> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> <tr> <td>张三</td> <td>20</td> <td>男</td> </tr> <tr> <td>李四</td> <td>22</td> <td>男</td> </tr> <tr> <td>王五</td> <td>18</td> <td>女</td> </tr> </tbody> </table> ``` ```javascript // JS代码 function Table(selector) { // 获取表格元素 this.table = document.querySelector(selector); // 获取表头行 this.headerRow = this.table.querySelector('thead tr'); // 获取数据行 this.dataRows = this.table.querySelectorAll('tbody tr'); } // 设置表头样式 Table.prototype.setHeaderStyle = function(styleObj) { for (let key in styleObj) { this.headerRow.style[key] = styleObj[key]; } }; // 设置数据行样式 Table.prototype.setDataRowStyle = function(styleObj) { for (let i = 0; i < this.dataRows.length; i++) { for (let key in styleObj) { this.dataRows[i].style[key] = styleObj[key]; } } }; // 添加新行 Table.prototype.addRow = function(data) { let newRow = document.createElement('tr'); for (let key in data) { let newCell = document.createElement('td'); newCell.textContent = data[key]; newRow.appendChild(newCell); } this.table.querySelector('tbody').appendChild(newRow); }; // 删除行 Table.prototype.deleteRow = function(index) { this.table.querySelector('tbody').deleteRow(index); }; // 获取所有数据 Table.prototype.getAllData = function() { let result = []; for (let i = 0; i < this.dataRows.length; i++) { let rowData = {}; let cells = this.dataRows[i].querySelectorAll('td'); for (let j = 0; j < cells.length; j++) { let header = this.headerRow.querySelectorAll('th')[j].textContent; rowData[header] = cells[j].textContent; } result.push(rowData); } return result; }; // 示例 let myTable = new Table('#my-table'); myTable.setHeaderStyle({ backgroundColor: '#EEE', fontWeight: 'bold' }); myTable.setDataRowStyle({ textAlign: 'center' }); myTable.addRow({ 姓名: '赵六', 年龄: '24', 性别: '男' }); myTable.deleteRow(2); console.log(myTable.getAllData()); ``` 这段代码实现了一个简单的表格组件,包括设置表头样式、设置数据行样式、添加新行、删除行、获取所有数据等功能。你可以在HTML中创建表格元素,然后通过JavaScript代码实例化一个Table对象,然后调用相应的方法来操作表格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨树林er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值