vue ag-grid-vue 大数据动态加载服务器请求数据

2023-11-05

vue ag-grid-vue 渲染大数据表格 动态请求服务器数据设置子目录


目前只能是初始是一次性加载所有数据再分页渲染,还没有研究出滚动分页加载服务器。

这个方法是一次加载所有数据在前端再做的分页渲染。点击目录文件展开能动态加载服务器的数据显示子目录数据
在这里插入图片描述

在这里插入图片描述

安装插件:

npm install --save ag-grid-enterprise ag-grid-community ag-grid-vue

代码实现

import { AgGridVue } from "ag-grid-vue";
import "ag-grid-enterprise";
import "ag-grid-community/dist/styles/ag-grid.css"; 
import "ag-grid-community/dist/styles/ag-theme-alpine.css";  // 主题
 <ag-grid-vue
        style="width: 100%; height: 100%;"
        class="ag-theme-alpine"
        id="myGrid"
        :headerHeight="0"
        :gridOptions="gridOptions"
        @grid-ready="onGridReady"
        :columnDefs="columnDefs"
        :defaultColDef="defaultColDef"
        :autoGroupColumnDef="autoGroupColumnDef"
        :rowModelType="rowModelType"
        :serverSideStoreType="serverSideStoreType"
        :treeData="true"
        :animateRows="true"
        :rowSelection="rowSelection"
        :groupSelectsChildren="true"
        :groupSelectsFiltered="true"
        :isRowSelectable="isRowSelectable"
        :groupDefaultExpanded="groupDefaultExpanded"
        :isServerSideGroupOpenByDefault="isServerSideGroupOpenByDefault"
        :isServerSideGroup="isServerSideGroup"
        :getServerSideGroupKey="getServerSideGroupKey"
        @selection-changed="onSelectionChanged"
      ></ag-grid-vue>
 beforeMount() {
    this.gridOptions = {};
    this.columnDefs = [
      {
        field: "id",
        headerName: "",
        hide: true
      },
      {
        field: "file_name",
        headerName: "",
        hide: true
      }
    ];
    this.defaultColDef = {
      width: 240,
      filter: "agTextColumnFilter",
      flex: 1
    };
    this.autoGroupColumnDef = {
      field: "file_name",
      cellRenderer: "agGroupCellRenderer", // 显示checkbox
      cellRendererParams: { checkbox: true } // 显示checkbox
    };
    this.rowSelection = "single"; // 单选
    this.groupDefaultExpanded = -1;
    this.isRowSelectable = rowNode => {
      return rowNode.data ? rowNode.data.file_type !== "dir" : false; // 显示CheckBox条件
    };
    this.rowModelType = "serverSide";
    this.serverSideStoreType = "partial";
    this.isServerSideGroupOpenByDefault = params => {
      return params.rowNode.level < 2;
    };
    this.isServerSideGroup = dataItem => {
      return dataItem.group;
    };
    this.getServerSideGroupKey = dataItem => {
      return dataItem.id;
    };
  },
mounted() {
    this.gridApi = this.gridOptions.api;
    this.gridColumnApi = this.gridOptions.columnApi;
  }
methods: {
    onSelectionChanged(event) {
      // 获取CheckBox选中的数据
      var selectedRows = this.gridApi.getSelectedRows();
      let item = selectedRows.length === 1 ? selectedRows[0] : "";
      console.log("item = ", item);
    },
    async onGridReady(params) {
      const updateData = data => {
        var fakeServer = createFakeServer(data); //初始函数
        var datasource = createServerSideDatasource(fakeServer); // 挂载数据
        params.api.setServerSideDatasource(datasource);
      };

      let params1 = {
        order: "file_type",
        sort: "asc",
        is_page: false
      };
      let { data } = await filelist(params1); // 初始化请求服务器获取根目录数据
      updateData(data.bosAfsFiles.array_files);
    }
  }

在vue页面的export default外,script内引入以下方法

window.createFakeServer = function createFakeServer(fakeServerData) {
  function FakeServer(allData) {
    this.data = allData;
  }
  FakeServer.prototype.getData = function(request) {
    async function extractRowsFromData(groupKeys, data) {
      //1. 初始化根目录数据
      if (groupKeys.length === 0) {
        let totalList = data.map(function(d) {
          return {
            group: d.file_type === "dir", //判断是dir(文件夹)显示展开符号,能点击展开
            id: d.id,
            file_name: d.file_name,
            file_type: d.file_type,
            md5: d.md5,
            afid_lite: d.afid_lite,
            afid_mini: d.afid_mini,
            create_time: d.create_time,
            expire_time: d.expire_time,
            ext: d.ext,
            parent: d.parent,
            sha1: d.sha1,
            size: d.size
          };
        });
        return totalList; // 服务器请求的数据做处理
      }
      // 动态根据文件夹id获取子目录数据
      var key = groupKeys[0];
      for (var i = 0; i < data.length; i++) {
        if (data[i].id === key) {
          // 获取子目录数据
          let params1 = {
            order: "file_type",
            sort: "asc",
            is_page: false,
            dir_id: data[i].id
          };

          let result = await filelist(params1); // 根据父目录id获取子目录数据
          let childrenList = result.data.bosAfsFiles.array_files
            ? result.data.bosAfsFiles.array_files
            : [];
          return extractRowsFromData(groupKeys.slice(1), childrenList);
        }
      }
    }
    return extractRowsFromData(request.groupKeys, this.data);
  };
  return new FakeServer(fakeServerData);
};

window.createServerSideDatasource = function createServerSideDatasource(
  fakeServer
) {
  function ServerSideDatasource(fakeServer) {
    this.fakeServer = fakeServer;
  }
  ServerSideDatasource.prototype.getRows = async function(params) {
    var allRows = await this.fakeServer.getData(params.request); // 获取总数据

    var request = params.request;
    var doingInfinite = request.startRow != null && request.endRow != null;
    var result = doingInfinite
      ? {
          rowData: allRows.slice(request.startRow, request.endRow),
          rowCount: allRows.length
        }
      : { rowData: allRows }; // 分页获取数据
    setTimeout(function() {
      params.success(result); //渲染分页得到的数据
    }, 200);
  };
  return new ServerSideDatasource(fakeServer);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue ag-grid-vue 大数据动态加载服务器请求数据 的相关文章

随机推荐

  • 论文笔记--用于人体姿势估计的深度双连续网络(Deep Dual Consecutive Network for Human Pose Estimation)

    索引 复杂情况下的多帧人体姿态估计是一种挑战 尽管最先进的人体关节检测器在静态图像上表现出了显著的效果 但当我们将这些模型应用于视频序列时 它们的表现就显得不足了 普遍存在的缺点包括无法处理运动模糊 视频失焦或姿势遮挡 这是因为无法捕捉到视
  • 工具分享

    随着电子邮件的普及 电子邮件欺骗也变得越来越普遍 电子邮件欺骗是一种针对用户的网络攻击 攻击者通常伪装成合法的发送者来骗取用户的信息或资金 为了保护用户的安全 有必要使用一款强大的电子邮件欺骗漏洞检测工具 EVC就是一款非常优秀的工具 功能
  • Android Studio 将项目转变成library(model)引入到另一个项目中使用

    最近要将项目转换成library 引入到另一项目中使用 所以记录引用的过程 1 修改配置 2 修改app文件夹里面的iml文件名称 在APP文件夹下 找到app iml 文件 将文件名改为想要命名的名称 这里改成loadingviewlir
  • 服务器的文件共享,服务器文件共享设置

    服务器文件共享设置 内容精选 换一换 本文介绍了弹性文件服务SFS各特性版本的功能发布和对应的文档动态 新特性将在各个区域 Region 陆续发布 欢迎体验 云耀云服务器默认设置的时区 是您制作镜像时选择的时区 如需修改 请参见本节内容 将
  • client mac addr不能开机进不去系统_电脑的系统进不去界面重装系统的方法

    学会自己安装系统不求人全过程 纯手打 电脑系统界面进不去 但屏幕只要有字 哪怕左上角只有一横 就可以重做系统 电脑开机就怕一个字一个符号也没有 重做系统只是c盘文件丢失 其他盘文件还在 但硬盘有毛病 格式化硬盘 或者重新分区 所有的文件都没
  • 关于Cubemx(HAL库)中ADC和DMA同时启用存在的问题

    在使用Cubemx编程STM32时 若同时开启ADC和DMA 则软件自动生成的代码如下 可以看到 ADC初始化在DMA前面 这样一来 我们会发现从DMA提取的数据错误的 原因就在它们两个初始化函数的先后顺序是有讲究的 正确的顺序应该是DMA
  • 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端以及订阅主题发送主题操作

    MQTT原理与应用 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端 本文章学习借鉴于太极创客团队 以表感谢 官网 http www taichi maker com 文章目录 MQTT原理与应用 一 使用电脑客户端和ESP
  • Could not load dynamic library ‘libcusolver.so.11‘ No such file or directory; LD_LIBRARY_PATH:

    今日在安装tensorflow的时候遇见不能使用gpu的情况 经过一顿费劲网上搜集资料 发现根本就没有人说明白这个事情 特此做个笔记 把这个报错一次性说明白 一是为了给自己做个记录 二是也希望能帮助大家 首先 基本高版本的tensor fl
  • Vue修改默认字体

    1 在assets文件夹下创建文件夹 命名为font 2 在font文件夹中新建文件 font css font face font family pingFangSC Medium src url PingFangMedium 0 ttf
  • 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来

    附上借鉴的地址 https blog csdn net lkp1603645756 article details 85013126 这些都是算法时空复杂度的表示 不仅仅用于表示时间复杂度 也用于表示空间复杂度 O后面的括号中有一个函数 指
  • Matlab学习10-图像处理之傅里叶变换

    文章目录 前言 一 离散傅里叶变换 二 二维离散傅里叶变换 三 傅里叶级数将周期函数转换为不同正弦波的叠加 前言 图像变换 一维离散变换 二维离散变换 傅里叶变换 离散余弦变换 Matlab学习10 图像处理之傅里叶变换 傅里叶变换 优点
  • 联合编译OpenCV+PCL+CUDA时需要注意的问题

    最近在写tsdf的程序 同时使用了OpenCV PCL和CUDA 在编译工程的时候发现了不少问题 在这里整理一下 1 cu和cpp文件 global host device 这样开头的cuda程序只能写在cu文件中 kernal lt lt
  • linux读写锁pthread_rwlock_t

    读写锁说明 读写锁实际是一种特殊的自旋锁 它把对共享资源的访问者划分成读者和写者 这种锁相对于自旋锁而言 能提高并发性 它允许同时有多个读者来访问共享资源 写者是排他性的 一个读写锁同时只能有一个写者或多个读者 但不能同时既有读者又有写者
  • 巴比特

    摘要 据钛媒体报道 当前市场对与内容相关的产品商业化的耐心不及以往 以至于 扎克伯格早早就为元宇宙设想好了商业化的落地场景 元宇宙方面 我们希望能够为用户提供更多业务帮助 比如通过聊天直接获取客户 直接对用户销售产品 提供客服帮助或再向用户
  • 国内NFT平台及玩法一览

    2021年被称为NFT的 元年 互联网巨头 各大企业 艺术家 明星纷纷入局NFT 屡创新高的NFT价格更是让其成为大众关注焦点 此推出NFT系列专题研究 盘点和总结NFT的发行市场 平台背景 投融资状况 市场热点 政策监管等相关内容 帮助读
  • c语言static关键字的理解

    static 一 概述 在c语言中static恰当的使用能让程序更加完美 细节上的严谨 代码会更好 也更利于程序的维护与扩展 而static使用灵活 且又有两种完全无关的用法 所以整理总结一下 二 static的两种用法 1 static修
  • Tomcat项目配置

    1 下载tomcat 版本 9 0 65 链接 https tomcat apache org download 90 cgi 2 解压tomcat tomcat直接解压就可以使用 解压后文件夹目录为 3 bin文件夹下 startup b
  • vue.js -- 全局组件&局部组件

    目录 vue组件 全局组件 组件定义 组件复用 组件的组件 局部组件 总结 vue组件 组件是 Vue js 最强大的功能之一 组件可以扩展 HTML 元素 封装可重用的代码 组件系统让我们可以用独立可复用的小组件来构建大型应用 几乎任意类
  • JAVA逻辑思维题(1)4个人过桥

    有4个女人要过一座桥 她们都站在桥的某一边 要让她们在17分钟内全部通过这座桥 这时是晚上 她们只有一个手电筒 最多只能让两个人同时过桥 不管是谁过桥 不管是一个人还是两个人 必须要带着手电筒 手电筒必须要传来传去 不能扔过去 每个女人过桥
  • vue ag-grid-vue 大数据动态加载服务器请求数据

    vue ag grid vue 渲染大数据表格 动态请求服务器数据设置子目录 目前只能是初始是一次性加载所有数据再分页渲染 还没有研究出滚动分页加载服务器 这个方法是一次加载所有数据在前端再做的分页渲染 点击目录文件展开能动态加载服务器的数