啊,你还在找一款强大的表格组件吗?书接上回《前端大量数据层级展示及搜索定位预览》,在做数据预览的时候查找了一些表格组件,
其实国内也有很多优秀的表格组件,下面这两个也都支持虚拟滚动、懒加载、自定义列操作等等。
安装依赖
如果你只想使用简单的表格预览功能,我们直接安装下面这些依赖就行
npm install ag-grid-vue3
如果你想使用侧边工具栏我们就需要安装付费的库(这里也可以直接下载使用,但是有水印和控制台警告)
npm install @ag-grid-community/client-side-row-model @ag-grid-community/core @ag-grid-enterprise/column-tool-panel ag-grid-enterprise
样式使用
ag-grid
内置了很多套主题,我们在使用的时候需要进行单独导入,比如我们使用ag-theme-alpine
主题(tips: 我们在项目中使用ag-theme-quartz
主题导入样式后很多css变量不生效,所以换成了ag-theme-alpine
)。
import "ag-grid-community/styles/ag-grid.css";
import "ag-grid-community/styles/ag-theme-alpine.css";
然后还需要在对应的ag-grid-vue
组件中设置对应的主题class
,例如
<ag-grid-vue
v-show="!props.isTableLoading && csvData.groupCsvData.length"
class="ag-theme-alpine"
:rowData="csvData.groupCsvData"
:columnDefs="csvData.fields"
:loading="props.isTableLoading"
:gridOptions="gridOptions"
ref="agGridRef"
>
</ag-grid-vue>
语言
ag-grid
默认是美式英文展示,我们如果使用到大量的功能,那么直接安装对应的语言包即可。如果使用的功能比较少,直接进行对应的属性设置即可。
安装语言包
npm install @ag-grid-community/locale
导入语言包
import { AG_GRID_LOCALE_CN } from '@ag-grid-community/locale';
使用
<ag-grid-vue
:localeText="AG_GRID_LOCALE_CN"
/* other grid options ... */
>
</ag-grid-vue>
如果简单的想替换一些描述请查找这里。在该项目中我是自己翻译了一些属性语言直接定义,没有安装语言包。
const localeText = {
columns: "设 置 列",
pinColumn: "固定此列",
pinLeft: "固定到左侧",
pinRight: "固定到右侧",
noPin: "不固定",
autosizeThiscolumn: "自适应此列",
autosizeAllColumns: "自适应全部列",
resetColumns: "重置全部列",
searchOoo: "过滤",
noRowsToShow: "暂无数据",
copy: "复制",
};
定义所有列设置(defaultColDef
)或单列设置
这些属性在defaultColDef
设置是对所有列都生效的,比如suppressColumnsToolPanel: true
, 那么所有列都不在列工具面板中显示。
下面介绍一些常用内容
contextMenuItems
(内置菜单项):设置单元格操作菜单项。mainMenuItems
: 设置表头菜单项(非tab分类)。为了更好的去控制,我们会在组件/gridOptions
中getMainMenuItems
属性动态决定设置哪些菜单项。
const getMainMenuItems = (params) => {
return [
...params.defaultItems.filter((item) => item !== 'columnFilter'),
'separator',
{
name: 'Filter',
menuItem: 'MenuItem', // 自定义组件
menuItemParams: {
column: params.column,
},
},
];
};
menuTabs
:表头列菜单项(分类)。('filterMenuTab' | 'generalMenuTab' | 'columnsMenuTab'
)suppressMovable
: 禁止拖动列(一般设置在某个列配置中,不会设置在全局)。lockPosition
: 锁定该列,设置left, right
后,其他列都能进行拖动到其前或者其后,他不同于pinned
,并且设置了lockPosition
就不要设置`pinne否则否则不生效。suppressHeaderMenuButton
: 隐藏表头列菜单。suppressHeaderContextMenu
: 右键不显示表头列菜单。sortable
:默认开启行排序,如果设置false
表示关闭。tooltipValueGetter
: 单元格引入提示内容自定义。cellRenderer
: 自定义单元格渲染内容。(例如搜索数据后端返回的是html文本,我们就需要在这里进行处理)。columnMenu
: 列菜单的显示类型(new
默认,一次性显示,使用mainMenuItems
进行配置,legacy
tab切换显示,使用menuTabs
进行配置)suppressContextMenu
: 设置为true
表示关闭上下文(单元格)菜单。(右键)
const defaultColDef: ColDef = {
flex: 1,
minWidth: 150,
sortable: false,
menuTabs: ["generalMenuTab"], // 菜单面板
suppressHeaderFilterButton: true,
suppressHeaderContextMenu: true,
};
columnTypes,自定义列type,主要是用于多个列(复用)。
列和数据的映射相关字段和其他表格组件大差不差,可以参考开发文档进行配置。由于column props
内容过多,用到那些功能去查文档即可。Vue Grid: Column Options Reference | AG Grid (ag-grid.com)
侧边操作栏
这里我们就使用列隐藏和拖拽(列操作),所以下面就介绍一下。首先我们需要注册其side功能组件。
import { ClientSideRowModelModule } from "@ag-grid-community/client-side-row-model";
import { ColumnsToolPanelModule } from "@ag-grid-enterprise/column-tool-panel";
import { ModuleRegistry } from "@ag-grid-community/core";
ModuleRegistry.registerModules([
ClientSideRowModelModule,
ColumnsToolPanelModule,
]);
然后就是定义侧边栏具体的内容。
const sideBar = {
toolPanels: [
{
id: "columns",
labelDefault: "设置列",
labelKey: "columns",
iconKey: "columns",
toolPanel: "agColumnsToolPanel",
hidden: true,
},
],
defaultToolPanel: "",
};
默认内置了列操作(显示/隐藏/重新排序列、对行进行分组和聚合数据,以及执行枢轴操作)(Columns Tool Panel)和过滤侧边栏(Filters Tool Panel)。ag-grid
也提供了自定义侧边栏的功能(Vue Grid: Tool Panel Component | AG Grid (ag-grid.com))
一般我们使用侧边栏工具都是自定义配置,不会直接使用sideBar
的默认配置。
const sideBar = {
toolPanels: [
{
id: 'columns',
labelDefault: 'Columns', // tab默认展示的名称
labelKey: 'columns', // 本地化获取的键值
iconKey: 'columns', // 图标名称
toolPanel: 'agColumnsToolPanel', // 自定义面板的组件,默认是agColumnsToolPanel
toolPanelParams: {}, // 自定义面板组件传递的参数。这个也可给agColumnsToolPanel组件传递参数
minWidth: 225,
maxWidth: 225,
width: 225
},
{
id: 'filters',
labelDefault: 'Filters',
labelKey: 'filters',
iconKey: 'filter',
toolPanel: 'agFiltersToolPanel',
minWidth: 180,
maxWidth: 400,
width: 250
}
],
position: 'left', // 侧边栏呈现的位置
hiddenByDefault: true, // 是否展示侧边栏条
defaultToolPanel: 'filters' // 指定默认展开的面板id。不指定就默认不展开面板
};
侧边栏相关方法都是通过agGridRef.api
实例去调用执行的,那就是逻辑层面的操作了,就不是配置层面的了。Vue Grid: Side Bar | AG Grid (ag-grid.com)
还有就是对内置组件agColumnsToolPanel, agFiltersToolPanel
进行特定的配置了(通过toolPanelParams
进行配置参数传递)。注意这里设置的配置不会影响到表格中的操作,但是表格中配置的列操作会影响到这个侧边栏。
菜单
表头菜单
表头菜单是否显示主要和列配置有关。
suppressHeaderMenuButton
, 设置为true
不显示菜单按钮。suppressHeaderFilterButton
, 设置为true
表示不在列标题中显示筛选按钮。当columnMenu = 'legacy'
时不适用。suppressHeaderContextMenu
, 设置为true
表示右键单击列标题时不显示列菜单。当columnMenu = 'legacy'
时不适用。suppressMenuHide
, 设置为true
时将始终显示列菜单按钮。当为false
时,列菜单按钮只会在鼠标位于列标题上时显示。如果columnMenu = 'legacy'
,这将默认为false而不是true。
这里可查看默认的内置菜单项Vue Grid: Column Menu | AG Grid (ag-grid.com)
单元格菜单
就是右键单元格(数据)时出现的菜单。
默认内置菜单项可以查看这里 Vue Grid: Context Menu | AG Grid (ag-grid.com)。
如果单元格出现时有遮挡不方便操作,我们可以将单元格菜单父元素设置成body,使用popupParent
属性。他是一个组件属性。表头菜单也可以设置。
以上就是ag-grid
组件的一些入门配置。具体相关api用到时可以查询官方文档,很详细的。
往期年度总结
往期文章
专栏文章
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论, 支持一下博主~
公众号:全栈追逐者,不定期的更新内容,关注不错过哦!
转载自:https://juejin.cn/post/7410625892031414298