element-ui 树形表格 懒加载 手风琴模式 拖动排序
手风琴模式
实现的效果: 其中一个节点展开时,其他节点关闭,一直保持最多只有一个节点是展开的。
需要解决的问题: element-ui 树形懒加载表格自带的节点展开时,默认只有第一次才会触发load函数,之后在重新展开节点时,并不会触发load函数。
实现原理:同一个的节点多次重复操作展开子节点时只触发一次load加载函数。当一个节点的子节点展开时,其他节点的子节点收起,同时新展开的节点都需要触发load函数
手风琴模式: 根据element-ui文档创建树形表格
row-key : 用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时,该属性是必填的
lazy : 开启懒加载模式
tree-props :指定哪些行是包含子节点
load :绑定节点加载函数
<template><el-table ref="multipleTable" :data="list" row-key="id" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"></el-table>
</template>
<script>import { listCategoryfrom } form '@/api/category'export default {data() {return {listQuery: {page: 1,limit: 10},list: []}},methods: {load(tree, treeNode, resolve) {const newListQuery = JSON.parse(JSON.stringify(this.listQuery))newListQuery.cid = tree.id// 动态加载子节点数据listCategory(newListQuery).then(response => {this.$nextTick(function() {this.list.map(item => {if (item.id != tree.id) {// 使用手风琴模式 expanded 控制子节点关闭还是开启,loaded设置为false,可以使树形表格每次都能加载this.$set(this.$refs.multipleTable.store.states.treeData[item.id], 'loading', false)this.$set(this.$refs.multipleTable.store.states.treeData[item.id], 'loaded', false)this.$set(this.$refs.multipleTable.store.states.treeData[item.id], 'expanded', false)}})})resolve(response.data.data.items)})},}}
</script>
需要显示为手风琴模式,重点的代码是 this.$nextTick() 中的函数:
this.$refs.multipleTable.store.states.treeData 获取所有父节点的状态
重新设置加载状态(这里是加载防止异常所以设置)
this.set(this.set(this.set(this.refs.multipleTable.store.states.treeData[item.id], ‘loading’, false)
重新设置节点未加载(手风琴重点代码,使load函数能够多次触发,解决了load不能多次触发的问题)
this.set(this.set(this.set(this.refs.multipleTable.store.states.treeData[item.id], ‘loaded’, false)
关闭已经打开的子节点 (expanded 为true 表示子节点展开, false 表示子节点关闭)
this.set(this.set(this.set(this.refs.multipleTable.store.states.treeData[item.id], ‘expanded’, false)
手风琴模式下的表格拖动排序
安装拖动插件 sortablejs
npm install sortablejs --save
在页面中引入
import Sortable from ‘sortablejs’
<template><el-table ref="multipleTable" :data="list" row-key="id" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"></el-table>
</template>
<script>import Sortable from 'sortablejs'import { listCategoryfrom } form '@/api/category'export default {data() {return {listQuery: {page: 1,limit: 10},list: [],treeDate: {children: [],display: true,expanded: false,lazy: true,level: 0,loaded: false,loading: false}}},mounted() {// 表格拖拽document.body.ondrop = function(event) {event.preventDefault();event.stopPropagation();}this.rowDrop()},methods: {load(tree, treeNode, resolve) {const newListQuery = JSON.parse(JSON.stringify(this.listQuery))newListQuery.cid = tree.id// 动态加载子节点数据listCategory(newListQuery).then(response => {this.$nextTick(function() {this.list.map(item => {if (item.id != tree.id) {// 使用手风琴模式 expanded 控制子节点关闭还是开启,loaded设置为false,可以使树形表格每次都能加载this.$set(this.$refs.multipleTable.store.states.treeData[item.id], 'loading', false)this.$set(this.$refs.multipleTable.store.states.treeData[item.id], 'loaded', false)this.$set(this.$refs.multipleTable.store.states.treeData[item.id], 'expanded', false)}})})resolve(response.data.data.items)})},rowDrop() {// 获取表格节点const tbody = document.querySelector('.el-table__body-wrapper tbody')const _this = this// 插件调用函数Sortable.create(tbody, {// 拖拽开始时onStart({oldIndex}) {_this.list.forEach(item => {// 重新设置 treeData 的值,让表格行拖动的过程方向图标不会消失(由于重新渲染表格数据,这一行看个人需求是否添加)_this.$set(_this.$refs.multipleTable.store.states.treeData, item.id, _this.treeDate)// 置空子节点数据,保证拖拽时只计算一级节点的数量,否则会造成节点拖拽无法正确计算位置。 lazyTreeNodeMap 是存放子节点的数据_this.$set(_this.$refs.multipleTable.store.states.lazyTreeNodeMap, item.id, [])})},// 拖拽结束onEnd({newIndex, oldIndex}) {// newIndex表格数据拖动后数据角标 oldIndex表格数据拖动前数据角标let from, endfrom = _this.list[oldIndex].idend = _this.list[newIndex].id// console.log(from, end)// 排序成功后重新获取数据 _this.list = [] 置空数据强制刷新数据,否则子节点数据无法更新,同时会出现bug ,使子节点出现在原来的位置// 后台排序,排序成功,重置数据paixu().then(res => {_this.list = []// 重新请求数据渲染_this.getList()})}})},}}
</script>
借鉴文章 https://blog.csdn.net/weixin_39001363/article/details/101547148
element-ui 树形表格 懒加载 手风琴模式 拖动排序相关推荐
- 使用 el-table 实现树形数据懒加载、点击行展开、每次只展示一条数据(大类)以及自定义表格合计值
1. 使用 el-table 实现树形数据懒加载 实现必需条件: lazy :load="loadNode" :tree-props="{ children: 'chil ...
- axios vue 加载效果动画_vue+axios+element ui 实现全局loading加载示例
实现全局loading加载 分析需求,我们只需要在请求发起的时候开始loading,响应结束的时候关闭loading,就这么简单 对不对? import axios from 'axios'; imp ...
- Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)
列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIn ...
- 大数据量树形数据表格展示, 虚拟表格,el-table, umy-ui, 表格懒加载
1. 出现的问题 要展示树形数据表格,根据当前点击的表格行去请求新的数据并展示, 基于这种情况遇到以下问题 1). 当树形表格数据层级大于五级且数据量较多时, 浏览器崩溃 2). 当数据条数展示超出5 ...
- element ui table组件 异步加载数据盒子位移
使用element ui 中的 table组件时 ,异步加载数据,然后渲染上去时会出现td与th对不齐,但是重新重新进一次就有又好了,但是对于用户体验肯定是不行的. 这个时候只需要使用element ...
- Element UI 树形表格 TreeGrid TreeTable 实现
最近在要使用类似easyui的TreeGrid的功能,但在Element中table没有现成的demo,查了一下,遇到这篇文章,写得非常不错的,原作者是一次性加载,但我们要求使用axios异步加载,所 ...
- element ui 图片加载失败_解决Element UI - el-image 图片初始化加载失败问题
最近使用elementUI的el-image发现经常会出现加载src失败的情况,问题估计就是e-image的src路径一旦初始化加载失败的话就没有异步刷新,(这个地方需要注意过这个问题的大佬解读下源码 ...
- element ui 树形-懒加载-表格-多选 勾选问题
element ui树形表格如下: 它的数据格式为:使用children字段来存放子级数据 tableData: [{id: 1,date: "2016-05-02",name: ...
- SAP Commerce Cloud (电商云) UI 的懒加载功能
最近工作中处理了 SAP Commerce Cloud (电商云) UI 的一个懒加载 (Lazy Load) 功能的问题,这里把自己学到的东西做个记录. UI 懒加载,有时又称惰性加载,延迟加载,是 ...
最新文章
- SCOM2012部署系列之七:推送Windows监控代理
- python3.7 6如何安装-redhat7.6 安装Python 3
- 扬州大学广陵学院计算机网络试卷,扬州大学广陵学院控制工程考试样卷B.doc
- 小程序中神秘的用户数据
- 太沉重了:中国获全球“人道主义摄影奖”的照片!组图
- Music 环形界面的算法记录
- 折线分割平面(递推dp)
- 让“施工进度计划”真正产生价值——不是为了做计划而计划
- 仿QQ音乐(别人的代码)
- 流式上传文件到服务器磁盘,通过HTTP将数据从浏览器流式传输到服务器的方法...
- vb计算机二级考试题库,国家计算机二级考试题库 VB上机试题第12套
- 云服务平台重构点 @Arthur @Gyb
- MacBook不断重启的 5 个原因以及如何解决此问题
- win10底部任务栏无响应 解决办法
- CHCR让iOS布局更婀娜
- 点云配准论文阅读笔记--(4PCS)4-Points Congruent Sets for Robust Pairwise Surface Registration
- SpringSecurity从入门到精通
- go语言爬取新版正方教务系统数据
- 北京 Visual Studio 2010 /*CODING完美世界*/
- 圆的FFT分析的算法
热门文章
- Celery从入门到出家
- 浅析能耗管理系统在企业中的应用
- 计算机网络技术色盲可以报吗,高考体检出色盲报考会受限 这里告诉你
- vue项目内存溢出,JavaScript heap out of memory
- 倍福TwinCAT(贝福Beckhoff)基础教程6.1 TwinCAT如何与高级语言通讯
- 工商银行软件测试面试流程,中国工商银行测试工程师笔试题.doc
- Java基础+流程控制+方法+数组【笔记含代码】
- Word目录自动生成,不使用word默认样式的,且指定从某页开始为第一页
- 新版标准日本语初级_第一课
- flink基础与flink培训——出租车乘车项目