umy-ui树形结构表格懒加载用法详解

news2024/11/17 17:53:06

效果图
在这里插入图片描述
在做后台时,使用的iview组件库中的树形表格,但数据量过大时会导致页面卡死,借助umy-ui的虚拟表格完美解决了数据量大卡顿的问题。

先放文档:http://www.umyui.com/umycomponent/u-table-column-api

安装

npm install umy-ui

引入

全局引入:在main.js中放入以下代码

  import Vue from 'vue';
  import UmyUi from 'umy-ui'
  import 'umy-ui/lib/theme-chalk/index.css';// 引入样式
  import App from './App.vue';

  Vue.use(UmyUi);

  new Vue({
    el: '#app',
    render: h => h(App)
  });

按需引入:

先安装 babel-plugin-component
npm install babel-plugin-component -D

在 .babelrc 中plugins添加:
{
  "plugins": [
    [
      "component",
      {
        "libraryName": "umy-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}

在main.js中按需引入:(这里我只需要用到表格,所以只引入了表格,完整组件列表和引入方式可以查看官网)
import  UTable  from 'umy-ui'
Vue.use(UTable)

使用

<u-table
        style="margin-top: 10px;"
        ref="plTreeTable"
        fixed-columns-roll
        beautify-table
        header-drag-style
        :height="tableHeight"
        :treeConfig="{
          children: 'children',
          expandAll: false,
          lazy: true,
          load: load,
          hasChildren: 'hasChildren'}"
        @toggle-tree-expand="toggleTreeExpand"
        use-virtual
        row-id="id"
        row-key="id"
        border>
        <!--u-table大数据表格 你需要在列上指定某个列显示展开收起 treeNode属性-->
        <u-table-column
          :tree-node="true"
          prop="name"
          label="名称"
          :width="200"/>
          <!-- 表头,其中prop是需要显示的字段 -->
        <u-table-column
          v-for="item in columns16"
          :key="item.key"
          :prop="item.key"
          :label="item.title"
          :width="item.width"
          align="center"/>
          <!--这里是自己添加的右侧操作按钮,根据需求而定-->
        <u-table-column 
          :resizable="false"
          :width="120"
          align="center"
          label="操作">
          <template slot-scope="scope">
            <Button size="small" title="下级" icon="md-add-circle" @click="showModal(null, 4, '下级', scope.row.id)"></Button>
            <Button size="small" title="修改" icon="md-create" @click="showModal(scope.row.id, 2, '修改')"></Button>
            <Button size="small" title="删除" icon="md-trash" @click="removeTableHandle(scope.row)"></Button>
        </template>
        </u-table-column>
    </u-table>

	<script>
	export default {
		 data () {
	    	 return {
	    	 columns: [ // 表头数据
		        {
		          title: '编号',
		          key: 'id',
		          width: 140,
		        },
		        {
		          title: '关联科目',
		          key: 'glkmmc',
		          align: 'center',
		        },
		        {
		          title: '车型',
		          key: 'jzlx',
		          align: 'center',
		        },
		        {
		          title: '大类名称',
		          key: 'ctype',
		          align: 'center',
		        },
		        {
		          title: '描述',
		          key: 'des',
		          align: 'center',
		        },
		        {
		          title: '题目数量',
		          key: 'questcount',
		          align: 'center',
		        },
		      ],
		      data5: [], // 完整表格数据
		      data13: [], // 
	    	 }
    	 },
    	 mounted() {
    	 },
    	 methods:{
			async getTreeData(){ // 请求数据
		      let paramData = {
		        type: 'list',
		        service: 'xxx',
		        src: 'xxx',
		      };
		      const res = await this.$http(paramData);
		      if (res.code == 200 && res.success) {
		        this.data5 = JSON.parse(JSON.stringify(res.data)); // 存储完整数据用作展开子集懒加载时使用
		        this.data13 = res.data; // 这个是实际渲染出来的数据,先将子集置空,保证页面运行速度
		        this.data13.map(v=>{
		          if(v.children.length>0){
		            v.children = [];
		            v.hasChildren = true; // 在children 为空的情况下,添加 hasChildren 为true才会显示展开按钮
		          }
		        })
		        // 设置表格数据
		        this.$refs.plTreeTable.reloadData([ ...this.data13])
		      }
		    },
		    // 子集收起展开时触发
		    toggleTreeExpand (row, treeExpanded, event) {
		      // console.log(row, treeExpanded, event,'toggleTreeExpand')
		    },
		    load (row, resolve) { 
		      // row是当前点击的内容,拿到id再去找完整数据中对应的子集
		      var res  = this.data5.filter(v=>{
		        return v.id == row.id;
		      })[0];
		      setTimeout(() => {
		        if ( row.id ) {
		          resolve(res .children)
		        } 
		      }, 1000)
		    },
		 }
	}
	
</script>

可选择的树形表格

在这里插入图片描述

使用

    <u-table
      style="margin-top: 10px;"
      ref="plTreeTable"
      fixed-columns-roll
      beautify-table
      :height="tableHeight"
      header-drag-style
      :treeConfig="{
        children: 'children',
        expandAll: false,
        lazy: true,
        load: load,
        hasChildren: 'hasChildren'}"
      @selection-change="handleSelectionChange"
      use-virtual
      row-id="id"
      row-key="id"
      border>
      <u-table-column border-line type="selection" width="55" :selectable="selectable"/>
      <!--u-table大数据表格 你需要在列上指定某个列显示展开收起 treeNode属性-->
      <u-table-column
        :tree-node="true"
        prop="name"
        label="名称"
        :width="200"/>
      <u-table-column
        v-for="item in columns"
        :key="item.key"
        :prop="item.key"
        :label="item.title"
        :width="item.width"
        align="center"/>
    </u-table>

	<script>
	export default {
		 data () {
	    	 return {
	    	 columns: [ // 表头数据
		        {
		          title: '编号',
		          key: 'id',
		          width: 140,
		        },
		        {
		          title: '关联科目',
		          key: 'glkmmc',
		          align: 'center',
		        },
		        {
		          title: '车型',
		          key: 'jzlx',
		          align: 'center',
		        },
		        {
		          title: '大类名称',
		          key: 'ctype',
		          align: 'center',
		        },
		        {
		          title: '描述',
		          key: 'des',
		          align: 'center',
		        },
		        {
		          title: '题目数量',
		          key: 'questcount',
		          align: 'center',
		        },
		      ],
		      data5: [], // 完整表格数据
		      data13: [], // 
	    	 }
    	 },
    	 mounted() {
    	 },
    	 methods:{
			async getTreeData(){ // 请求数据
		      let paramData = {
		        type: 'list',
		        service: 'xxx',
		        src: 'xxx',
		      };
		      const res = await this.$http(paramData);
		      if (res.code == 200 && res.success) {
		        this.data5 = JSON.parse(JSON.stringify(res.data)); // 存储完整数据用作展开子集懒加载时使用
		        this.data13 = res.data; // 这个是实际渲染出来的数据,先将子集置空,保证页面运行速度
		        this.data13.map(v=>{
		          if(v.children.length>0){
		            v.children = [];
		            v.hasChildren = true; // 在children 为空的情况下,添加 hasChildren 为true才会显示展开按钮
		          }
		        })
		        // 设置表格数据
		        this.$refs.plTreeTable.reloadData([ ...this.data13])
		      }
		    },
		    load (row, resolve) { 
		      // row是当前点击的内容,拿到id再去找完整数据中对应的子集
		      var res  = this.data5.filter(v=>{
		        return v.id == row.id;
		      })[0];
		      setTimeout(() => {
		        if ( row.id ) {
		          resolve(res .children)
		        } 
		      }, 1000)
		    },
		    // index对应的行是否可选
		    selectable (row, index) {
		        // if (index==1) {
		      return true
		        // }
		    },
		    // 点击复选框按钮
		    handleSelectionChange(val){
		      this.chooseList = val; // 获取到点击的值
		    }
		 }
	}
	
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu Server版 之 mysql 系列

Ubuntu 分 桌面版 和 服务版 桌面版 &#xff1a;有额外的简易界面 服务版&#xff1a;是纯黑框的。没有任何UI界面的可言 安装mysql 安装位置 一般按照的位置存放在 /usr/bin 中 sudo apt-get install mysql-server查看mysql的状态 service mysql status mysql 安全设置…

对原型、原型链的理解

在 JavaScript 中是使用构造两数来新建一个对象的&#xff0c;每一个构造函数的内部都有一个 prototype 属性&#xff0c;它的属性值是一个对象&#xff0c;这个对象包含了可以由该构造西数的所有实例共享的属性和方法。当使用构造函数新建一个对象后&#xff0c;在这个对象的内…

js加载和长任务

js加载和长任务 本文将讲解以下浏览器如何加载js&#xff0c;并介绍一些可以提高网页加载速度的方法。 Evaluate Script 如果我们在devtools的performance中分析过网站的加载性能&#xff0c;可能会看到一个很长的任务&#xff0c;叫做Evaluate Script. 在这种情况下&#x…

IDS(Intrusion Detection Systems)

计算机安全的三大中心目标是&#xff1a;保密性(Conf idential ity)、完整性(Integrity)、可用性(Availability)。 身份认证与识别、访问控制机制、加密技术、防火墙技术等技术共同特征就是集中在系统的自身加固和 防护上&#xff0c;属于静态的安全防御技术&#xff0c;缺乏主…

【微服务架构设计】微服务不是魔术:处理超时

微服务很重要。它们可以为我们的架构和团队带来一些相当大的胜利&#xff0c;但微服务也有很多成本。随着微服务、无服务器和其他分布式系统架构在行业中变得更加普遍&#xff0c;我们将它们的问题和解决它们的策略内化是至关重要的。在本文中&#xff0c;我们将研究网络边界可…

上门居家养老小程序社区养老小程序开发方案详解

居家养老管理社区养老小程序有哪些功能呢&#xff1f; 1.选择养老服务类型 医疗护理&#xff0c;家政服务预约&#xff0c;上门助浴、上门做饭&#xff0c;上门助餐&#xff0c;生活照护&#xff0c;康复理疗、精神慰藉、委托代办等。各项服务的详情介绍。 2.选择预约时间 选择…

Linux_NVR_SDK 编译应用 -基于iTOP-RK3568开发板

在源码 build/app 目录下有发布版本的 RKMPI 以及编译配置&#xff0c;目前的编译方式只支持 Cmake 脚本。如果要编译其他应用&#xff0c;可以参考 build/app/build/build.sh 脚本配置编译工具链。 以编译 RKMPI 应用程序为例&#xff0c;进行示范&#xff1a; 1. 使能 sdk…

BIM与GIS融合:公路设计施工信息化的创新解决方案

随着信息技术的不断发展和应用&#xff0c;建筑行业也迎来了数字化转型。BIM&#xff08;建筑信息模型&#xff09;和GIS&#xff08;地理信息系统&#xff09;作为建筑行业中的重要技术&#xff0c;它们的融合对于实现公路施工信息化具有重要意义。Bim技术可以提供精细的建筑信…

(无人机方向)ros小白之键盘控制无人机(终端方式)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一&#xff1a;配置pycharm的ros开发环境二&#xff1a;核心代码讲解三 效果演示XTDrone 四 完整代码 前言 ubuntu 18.04 pycharm ros melodic 做一个在终端中…

Android 截图功能实现

Android 截图功能实现 简介效果图功能实现1. 截取当前可见范围屏幕2. 截取当前可见范围屏幕&#xff08;不包含状态栏&#xff09;3. 截取某个控件4. 截取ScrollView5. 长截图6. 截屏动画效果7. 显示截屏结果&#xff0c;自动消失6. 完整代码 简介 在Android应用中开发截图功能…

Kibana+Prometheus+node_exporter 监控告警部署

下载好三个软件包 一、prometheus安装部署 1、解压 linxxubuntu:~/module$ tar -xvf prometheus-2.45.0-rc.0.linux-amd64.tar.gz 2、修改配置文件的IP地址 # my global config global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is ever…

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04 一、安装linux子系统 1.1、 启动或关闭Windows功能-适用于Linux的Windows子系统 1.2 WSL 官方文档 使用 WSL 在 Windows 上安装 Linux //1-安装 WSL 命令 wsl --install//2-检查正在运行的 WSL 版本&#xff1a;…

LeetCode221.Maximal-Square<最大正方形>

题目&#xff1a; 思路&#xff1a; 这题是动态规划&#xff0c;但是不会写。想着判断dp的 <上&#xff0c;左&#xff0c;左上> 去了。发现只能这样最大只能判断面积为4的正方形因为只会判断另外三个方格。而要想判断更大的正方形那就需要递归操作了。那肯定会超时了。…

乌班图安装MySQL5.7时的故障求解

wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb dpkg -i mysql-apt-config_0.8.12-1_all.deb apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29 apt update

微信小程序云开发快速入门

什么是云开发&#xff1f; 云开发是可以帮助我们快速成为全栈的一种后端云服务&#xff0c;采用的是Serverless的架构。开发者无须搭建服务器&#xff0c;可直接使用其中的云数据库、云存储、云函数等云服务基础功能。 那么这个时候你可能会想&#xff0c;这和现在的传统开发…

Educational Codeforces Round 152 (Rated for Div. 2) D题 1849D Array Painting

传送门 https://codeforces.com/contest/1849/problem/D D. Array Painting 题意 题解 分类讨论 这题的精髓在于欠债 用一个a0表示当前有没有负债 当前欠债最多为1 首先我们讨论, 在不欠债的情况下遇到0是怎么模拟的: 前面有能够产生贡献的12连通块 例如: 12110 很明显答案…

vue element ui el-tree 通过子节点反向递归查找父节点

今天做了一个项目采用的是element tree组件&#xff0c;要求子父节点不强关联&#xff0c;但是当我点击子节点时&#xff0c;会反向的选择所有的父节点&#xff0c;如下图&#xff1a; 当我点击电话时&#xff0c;往上一层的“电话”和“我的”均为父级以上的节点&#xff0c;全…

Practice1|1207. 独一无二的出现次数、1365. 有多少小于当前数字的数字、941. 有效的山脉数组

1207. 独一无二的出现次数 1.题目&#xff1a; 给你一个整数数组 arr&#xff0c;请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的&#xff0c;就返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;arr [1,2,2,1,1,3…

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

安卓的播放器对比与选型&#xff08;vlc&#xff0c;EXOplayer&#xff0c;Ijkplayer&#xff0c;GSYVideoPlayer&#xff09;&#x1f4fa;详细过程 前言一、vlc二、EXOplayer三、Ijkplayer四、GSYVideoPlayer&#x1f525;&#x1f525;&#x1f525;五、其他的开源播放器jia…

婚庆服务小程序app开发方案详解

开发一款婚庆行业服务小程序有哪些功能呢&#xff1f; 1、选择分类 选择婚庆、婚车、婚宴、司仪、彩妆、婚庆用品、跟拍、摄影等&#xff0c;筛选出对应的商家 2、选择商家 选择分类后&#xff0c;可以选择商家&#xff0c;查看各个商家的详细介绍情况。 3、选择服务套餐 各…