当前位置: 首页 > news >正文

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

文章目录

  • 安装
  • 基础使用
    • 列数据可编辑
    • 列数据选择填入
    • 行数据可选择
    • 添加分页信息
    • 表头整体添加模糊筛选
    • 让某一个 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>

代码

基本代码

<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.mrgr.cn/news/66922.html

相关文章:

  • (11)(2.1.6) Hobbywing DroneCAN ESC(二)
  • 【LeetCode】【算法】438.找到字符串中所有字母异位词
  • 【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
  • 人工智能学习--ANN模型、SVR模型
  • 【每日一题】LeetCode - 最接近的三数之和
  • EHOME视频平台EasyCVR萤石设备视频接入平台视频诊断技术可以识别哪些视频质量问题?
  • Kafka自动生产消息软件(自动化测试Kafka)
  • gomarkdown漏洞CVE-2024-44337--手把手教你go-fuzz模糊测试引擎如何进行漏洞挖掘
  • Modbus解析流程全面升级:体验全新核心与终极优化!
  • SpringBoot中使用SpringTask实现定时任务
  • 设置Three.js响应式画布
  • Android RecyclerView ,使用ItemDecoration设置边距的大坑:左右边距不均匀/不同,已解决。
  • 【C++课程学习】:string的模拟实现
  • 防患于未然才是预警大屏的意义所在,看它是如何做的?
  • java-web-day14-项目属性配置和bean的管理
  • docker 常用方法
  • 编译cartographer和cartographer_ros 过程
  • 超好用的运维终端 NuShell
  • 《纺织报告》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 再也不怕丢失灵感:Heynote,让开发者的笔记更高效
  • 【开发工具】解决Ubuntu首次打开vscode工作区字体小的问题
  • UCLA、MIT数学家推翻39年经典数学猜想!AI证明卡在99.99%,人类最终证伪
  • 检索增强和知识冲突学习笔记
  • 企业防泄密指南|如何防止员工泄密?5个常用的防泄密方案详细说明,赶紧去试!
  • spark人才推荐系统-计算机设计毕业源码19842
  • 智能存储解决方案:探索 TDengine 的多级存储功能