在Vue使用ag-grid-vue表格的分页自定义使用el-element-ui的分页

在这里插入图片描述

ag-grid-vue列表设置属性:pagination="true"就能开启分页,但是ag-grid-vue列表自带的分页样式不好看,使用el-element-ui的分页既能直接使用它的样式,也能自己快速设置关于分页的size-change和current-page方法,也能设置page-size属性。
首先第一步

一、隐藏ag-grid自带的分页样式

 /* 隐藏ag-grid自带的分页样式 */
.ag-paging-panel{
  display:none;
}

接着写结构,此处使用ag-theme-balham主题,data里面定义表格的一些属性可以看我之前的博客Ag-grid在vue中使用的必要属性

二、搭建ag-grid列表结构

<div>
 <ag-grid-vue
    :selectCol="selectCol"
    :rowHeight="rowHeight"
    :headerHeight="headerHeight"
    :minColWidth="minColWidth"
    class="ag-theme-balham"
    style="height: 400px"
    @gridReady="onGridReady"
    :columnDefs="columnDefs"
    :rowData="rowData"
    cacheBlockSize="0"
    maxBlocksInCache="0"
    :animateRows="true"
    :pagination="true"
    :defaultColDef="defaultColDef"
    :context="context"
    :gridOptions="gridOptions"
  >
  </ag-grid-vue>
  <div class="my_pagination">
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page.sync=searchForm.currentPage
      :page-sizes="[20, 50, 100, 200, 300]"
      :page-size=searchForm.pageSize
      layout="total, sizes, prev, pager, next, jumper"
      :total="totalRows"
      background
      >
    </el-pagination>
  </div>
</div>

三、初始化列

在这里插入图片描述
在这里插入图片描述

四、数据渲染列表

在这里插入图片描述

五、设置列表的字段

在没有接口保存到后端的情况下,使用store2保存或者使用本地存储localStorage。
在这里插入图片描述

六、定义element-ui分页的方法

 handleSizeChange(val) {
    this.searchForm.pageSize = val;
    // 调接口
  },
  handleCurrentChange(val) {
    this.searchForm.currentPage = val;
    // 调接口
  }

六、完整代码

<template>
  <div>
    <ag-grid-vue
      :selectCol="selectCol"
      :rowHeight="rowHeight"
      :headerHeight="headerHeight"
      :minColWidth="minColWidth"
      class="ag-theme-balham"
      style="height: 400px"
      @gridReady="onGridReady"
      :columnDefs="columnDefs"
      :rowData="rowData"
      cacheBlockSize="0"
      maxBlocksInCache="0"
      :animateRows="true"
      :pagination="true"
      :defaultColDef="defaultColDef"
      :context="context"
      :gridOptions="gridOptions"
    >
    </ag-grid-vue>
    <div class="my_pagination">
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page.sync=searchForm.currentPage
        :page-sizes="[20, 50, 100, 200, 300]"
        :page-size=searchForm.pageSize
        layout="total, sizes, prev, pager, next, jumper"
        :total="totalRows"
        background
        >
      </el-pagination>
    </div>
  </div>
</template>
<script>
import Storage from 'store2'
export default {
  name: "agGridDemo",
  data() {
    return {
    // 请求参数
      searchForm: {
        currentPage: 1, 
        pageSize: 20,
      },
      totalRows: 0,// 列表总条数
      // 表格属性
      rowHeight: 48,
      headerHeight: 40,
      rowStyle: {
        background: "white",
      },
      minColWidth: 20,
      gridName: "myGridName",
      defaultColDef: null,
      columnDefs: null,
      gridApi: null,
      gridColumnApi: null,
      rowData: [],
      frameworkComponents: null,
      context: null,
      selectCol: {
        headerName: "",
        width: 30,
        maxWidth: 30,
      },
      gridOptions: {},
      tooltipShowDelay: null,
    };
  },
  beforeMount() {
    this.columnDefs = [
      {
        headerName: "时间",
        field: "dateStr",
      },
      {
        headerName: "销量",
        field: "sales",
      },
      {
        headerName: "订单量",
        field: "orderQuantity",
      },
      {
        headerName: "价格",
        field: "price",
      }
    ];
    this.defaultColDef = {
      valueFormatter: this.valueFormatter,
      resizable: true,
      suppressSizeToFit: true,
      editable: true,
      lockPinned: true,
      cellEditor: "agLargeTextCellEditor",
      tooltipComponent: "customTooltip",
      sortable: true
    };
    this.frameworkComponents = {};
    this.context = { componentParent: this };
    this.tooltipShowDelay = 0;
  },
  methods: {
    onGridReady(params) {
      this.gridApi = params.api;
      this.gridColumnApi = params.columnApi;
      this.setGridColumn(this.gridName);
      // 此处应该调接口,接口模拟接口返回的数据,渲染给表格
      var list = [
        {
          dateStr: '2020-11-11',
          sales: 10,
          orderQuantity: 20,
          price: 30,
        },
        {
          dateStr: '2020-11-12',
          sales: 11,
          orderQuantity: 22,
          price: 33,
        },
        {
          dateStr: '2020-11-13',
          sales: 10,
          orderQuantity: 20,
          price: 30,
        },
        {
          dateStr: '2020-11-14',
          sales: 11,
          orderQuantity: 22,
          price: 33,
        },
        {
          dateStr: '2020-11-15',
          sales: 10,
          orderQuantity: 20,
          price: 30,
        },
        {
          dateStr: '2020-11-16',
          sales: 11,
          orderQuantity: 22,
          price: 33,
        },
        {
          dateStr: '2020-11-17',
          sales: 10,
          orderQuantity: 20,
          price: 30,
        },
        {
          dateStr: '2020-11-18',
          sales: 11,
          orderQuantity: 22,
          price: 33,
        },
        {
          dateStr: '2020-11-19',
          sales: 10,
          orderQuantity: 20,
          price: 30,
        },
        {
          dateStr: '2020-11-20',
          sales: 11,
          orderQuantity: 22,
          price: 33,
        },
        {
          dateStr: '2020-11-21',
          sales: 10,
          orderQuantity: 20,
          price: 30,
        },
        {
          dateStr: '2020-11-22',
          sales: 11,
          orderQuantity: 22,
          price: 33,
        },
      ]
      this.rowData = list
      this.totalRows = list.length
      // 调整表格列宽大小自适应
      this.gridApi.sizeColumnsToFit();
    },
     /* 设置列表的字段 */
    setGridColumn(gridName){
      let gridColumn = Storage.namespace('gridColumn')
      if (gridColumn.get(gridName)){
        this.gridColumnApi.setColumnState(gridColumn.get(gridName))
      }
    },
    // element-ui分页
    handleSizeChange(val) {
      this.searchForm.pageSize = val;
      // 调接口
    },
    handleCurrentChange(val) {
      this.searchForm.currentPage = val;
      // 调接口
    }
  },
};
</script>
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ag-grid-vue3 是一个用于 Vue3 的数据表格组件,而 element-plus 是一个基于 Vue3 的 UI 组件库。虽然这两个组件库可以独立使用,但是它们可以一起使用以增强 UI 功能。 首先,你需要在项目中安装 element-plus,可以使用 npm 或 yarn 安装,如下所示: ``` npm install element-plus --save ``` 或 ``` yarn add element-plus ``` 安装完成后,在 Vue3 中使用 element-plus 组件,你可以在 main.js 文件中使用以下代码: ```javascript import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 这里我们在 main.js 中导入了 ElementPlus 组件,并使用 app.use(ElementPlus) 将组件注册到 Vue3 中。注意,为了让样式生效,你需要在 main.js 中引入 element-plus/lib/theme-chalk/index.css。 接下来,在 ag-grid-vue3 中使用 element-plus 组件,你可以在 ag-grid-vue3 的 columnDefs 中使用 element-plus 的组件,例如: ```javascript { headerName: '姓名', field: 'name', cellRendererFramework: { template: '<el-button>{{ value }}</el-button>', data() { return { value: '' } }, mounted() { this.value = this.params.value } } } ``` 这里我们在 ag-grid-vue3 的 columnDefs 中使用了 element-plus 的 el-button 组件作为单元格渲染器,这样我们就可以在 ag-grid-vue3 中使用 element-plus 的组件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值