【Ag-Grid】 使用笔记 Vue3 + Vite(一)

news/2024/11/13 13:56:13/

文章目录

  • 安装
  • 基础使用
    • 列数据可编辑
    • 列数据选择填入
    • 行数据可选择
    • 添加分页信息
    • 表头整体添加模糊筛选
    • 让某一个 Cell 或者 Row 变色
  • 参考
  • 代码
    • 基本代码
    • 整体代码(一)


安装

首先用 vite 脚手架搭建一个空的项目,然后依赖安装

pnpm install ag-grid-vue3 ag-grid-community @ag-grid-community/locale

其中

  • 核心组件:ag-grid-vue3
  • 提供基础样式:ag-grid-community
  • 提供语言包:@ag-grid-community/locale

我当前各个依赖的版本如图所示

在这里插入图片描述


基础使用

可以直接拿文本最下面的 基本代码 来起步,代码量还是比较少的,阅读没什么问题,前面几个步骤都是根据官网的说明做过来的,实现的效果如下图所示

在这里插入图片描述

提示:官网上的例子有可能不正确,比方说这个
在这里插入图片描述
怎么解决呢,看这个 CodeLive 上的代码在这里插入图片描述

列数据可编辑

在允许编辑的列对象中,添加 editabletrue

在这里插入图片描述

我们改一下 Make 列的数据试一试
在这里插入图片描述
但是如果使用了 valueGetter 的话,即使编辑了,也不会生效,因为 valueGetter 是依赖某些数据的,比方说这里的 Make & Model 是依赖 p.make + p.model

在这里插入图片描述

列数据选择填入

在这里插入图片描述

{field: "make",editable: true,cellEditor: 'agSelectCellEditor',cellEditorParams: {values: ['Tesla', 'Ford', 'Toyota'],},
},

行数据可选择

在这里插入图片描述

在这里插入图片描述

添加分页信息

在这里插入图片描述

const pagination = ref(true)
const paginationPageSize = ref(500)
const paginationPageSizeSelector = ref([200, 500, 1000])<ag-grid-vue style="width: 100%; height: 100%" :class="themeClass" :columnDefs="colDefs" :rowData="rowData":defaultColDef="defaultColDef" :gridOptions="gridOptions" :rowSelection="rowSelection" :pagination="pagination":paginationPageSize="paginationPageSize" :paginationPageSizeSelector="paginationPageSizeSelector"></ag-grid-vue>

表头整体添加模糊筛选

在这里插入图片描述

const defaultColDef = ref({filter: "agTextColumnFilter",floatingFilter: true,
});
</script><template><div class="container"><ag-grid-vue style="width: 100%; height: 100%" :class="themeClass" :columnDefs="colDefs" :rowData="rowData":defaultColDef="defaultColDef" :gridOptions="gridOptions" :rowSelection="rowSelection" :pagination="pagination":paginationPageSize="paginationPageSize" :paginationPageSizeSelector="paginationPageSizeSelector"></ag-grid-vue></div></template>

让某一个 Cell 或者 Row 变色

如图所示
在这里插入图片描述

// 部分代码
const colDefs = ref([{field: "electric",cellClassRules: {'rag-green': params => params.value === true,}}
]);
const rowClassRules = ref({'rag-red': params => params.data.make === 'Ford',
})
</script><template><div class="container"><ag-grid-vue style="width: 100%; height: 100%" :class="themeClass" :columnDefs="colDefs" :rowData="rowData":defaultColDef="defaultColDef" :gridOptions="gridOptions" :rowSelection="rowSelection" :pagination="pagination":paginationPageSize="paginationPageSize" :paginationPageSizeSelector="paginationPageSizeSelector":rowClassRules="rowClassRules"></ag-grid-vue></div></template><style scoped>
::v-deep .rag-red {background-color: #cc222244;
}:deep(.rag-green) {background-color: #33cc3344;
}
</style>

参考

  1. 数据的变化,比较常见的场景都在这里 https://www.ag-grid.com/javascript-data-grid/data-update-row-data/在这里插入图片描述

代码

基本代码

<script setup>
import { ref } from 'vue';
import "ag-grid-community/styles/ag-grid.css"; // Mandatory CSS required by the Data Grid
import "ag-grid-community/styles/ag-theme-quartz.css"; // Optional Theme applied to the Data Grid
import { AgGridVue } from "ag-grid-vue3"; // Vue Data Grid Component
import MyButton from './Button.vue'
import { AG_GRID_LOCALE_CN, AG_GRID_LOCALE_JP } from '@ag-grid-community/locale';const gridOptions = {localeText: AG_GRID_LOCALE_CN, // 设置为中文语言包
};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 },{ make: "Mercedes", model: "EQA", price: 48890, electric: true },{ make: "Fiat", model: "500", price: 15774, electric: false },{ make: "Nissan", model: "Juke", price: 20675, electric: false },
]);const colDefs = ref([{headerName: "Make & Model", valueGetter: ({ data: p }) => {console.log(p);return p.make + ' ' + p.model},flex: 2,filter: true},{ field: "make", },{ field: "model" },{ field: "price", valueFormatter: p => '£' + p.value.toLocaleString() },{ field: "electric" },{field: "button",cellRenderer: MyButton}
]);const defaultColDef = {flex: 1,
};
const themeClass = ref("ag-theme-quartz-dark");</script><template><div class="container"><ag-grid-vue style="width: 100%; height: 100%" :class="themeClass" :columnDefs="colDefs" :rowData="rowData":defaultColDef="defaultColDef" :gridOptions="gridOptions"></ag-grid-vue></div></template><style scoped>
.container {height: 500px;padding: 20px;
}
</style>

整体代码(一)

<script setup>
// 已经把 "ag-grid-community/styles/ag-grid.css" 等 css 样式文件放到 main.js 中
import { ref } from 'vue';
import { AgGridVue } from "ag-grid-vue3"; // Vue Data Grid Component
import MyButton from './Button.vue'
import { AG_GRID_LOCALE_CN, AG_GRID_LOCALE_JP } from '@ag-grid-community/locale';const gridOptions = {localeText: AG_GRID_LOCALE_CN,
};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 },{ make: "Mercedes", model: "EQA", price: 48890, electric: true },{ make: "Fiat", model: "500", price: 15774, electric: false },{ make: "Nissan", model: "Juke", price: 20675, electric: false },
]);const themeClass = ref("ag-theme-quartz-dark");
const rowSelection = {mode: 'multiRow',headerCheckbox: false,
}
const pagination = ref(true)
const paginationPageSize = ref(500)
const paginationPageSizeSelector = ref([200, 500, 1000])const defaultColDef = ref({filter: "agTextColumnFilter",floatingFilter: true,
});const colDefs = ref([{headerName: "Make & Model", valueGetter: ({ data: p }) => {// console.log(p);return p.make + ' ' + p.model},flex: 2,filter: true,editable: true},{field: "make",editable: true,cellEditor: 'agSelectCellEditor',cellEditorParams: {values: ['Tesla', 'Ford', 'Toyota'],},},{ field: "model", editable: true },{ field: "price", valueFormatter: p => '£' + p.value.toLocaleString() },{field: "electric",cellClassRules: {// apply green to electric cars'rag-green': params => params.value === true,}},{field: "button",cellRenderer: MyButton}
]);const rowClassRules = ref({'rag-red': params => params.data.make === 'Ford',
})
</script><template><div class="container"><ag-grid-vue style="width: 100%; height: 100%" :class="themeClass" :columnDefs="colDefs" :rowData="rowData":defaultColDef="defaultColDef" :gridOptions="gridOptions" :rowSelection="rowSelection" :pagination="pagination":paginationPageSize="paginationPageSize" :paginationPageSizeSelector="paginationPageSizeSelector":rowClassRules="rowClassRules"></ag-grid-vue></div></template><style scoped>
.container {height: 500px;padding: 20px;
}::v-deep .rag-red {background-color: #cc222244;
}:deep(.rag-green) {background-color: #33cc3344;
}
</style>

http://www.ppmy.cn/news/1546030.html

相关文章

最新三维视觉下的扩散模型综述——Diffusion Models in 3D Vision: A Survey

目录 摘要 一、引言 二、扩散模型简介 A.扩散模型的介绍 B.扩散模型的数学基础 C.扩散模型的变体 D.三维视觉中的生成过程 三、三维视觉基础 A.三维表示 B.三维视觉中的深度学习方法 C.3D视觉中的挑战 四、三维扩散生成任务 A.无条件生成 B.图像到三维 C.文本到…

探索 C++20:C++ 的新纪元

探索 C20&#xff1a;C 的新纪元 对于那些热爱 C 的程序员们&#xff0c;当看到 C20 的发布&#xff0c;应该多少有些兴奋吧&#xff0c;因为C20 带来了许多引人注目的新特性&#xff0c;让语言变得更具表现力、更高效&#xff0c;并且在编写和维护代码方面极大地提升了体验&a…

华为OD机试 - 无重复字符的元素长度乘积的最大值(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

在 hiveSQL 中判断一个字段是否包含某个值

在 hiveSQL 中判断一个字段是否包含某个值是在写sql时经常遇到的问题&#xff0c;本文将通过下述案例用五种方法进行解决 数据准备&#xff1a; 题目&#xff1a;查找姓名中含有”i“的员工信息 CREATE TABLE employee (name STRING,age INT );INSERT INTO employee VALUES(…

Java基础——类和对象的定义链表的创建,输出

目录 什么是类&#xff1f; 什么是对象? 如何创建链表&#xff1f; 尾插法&#xff1a; 头插法&#xff1a; 输出链表的长度 输出链表的值 什么是类&#xff1f; 创建Java程序必须创建一个类class. .java程序需要经过javac指令将文件翻译为.class字节码文件&#xff0c…

高效集成:聚水潭采购数据同步到MySQL

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将聚焦于如何通过轻易云数据集成平台&#xff0c;将聚水潭系统中的采购入库单数据高效、准确地集成到MySQL数据库中。具体方案名称为“聚水潭-采购入库单-->BI阿尼三-采购入库表_copy”。 首先&#…

Git别名设置

在 Git 中设置命令别名可以让你更高效地使用常见的 Git 命令。通过为常用命令创建简短的别名&#xff0c;可以减少输入的字符数并加速工作流程。 参考链接 设置 Git 命令别名的方法&#xff1a; 使用 Git 配置命令&#xff1a; Git 允许通过 git config 命令来设置命令别名。这…

面向对象的需求分析和设计(一)

[toc] 1. 引言 前一篇文章《我对需求分析的理解》提到了面向对象分析和设计&#xff0c;正好最近又重新有重点的读了谭云杰著的《Think in UML》&#xff0c;感觉有必要写把书中一些核心内容观点以及自己的想法整理出来&#xff0c;一是方便自己日后的复习&#xff0c;另外也…