element的Table表格组件树形数据与懒加载简单使用

这篇具有很好参考价值的文章主要介绍了element的Table表格组件树形数据与懒加载简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 代码实现

<template>
    <div>
        <!-- lazy 是否懒加载子节点数据 -->
        <!-- load 加载子节点数据的函数,lazy 为 true 时生效,函数第二个参数包含了节点的层级信息 -->
        <!-- :default-expand-all="defaultExpandAll" 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效  -->
        <!-- expand-row-keys 可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组。 -->
        <!-- row-click 当某一行被点击时会触发该事件 -->
        <!-- expand-change 当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded)	 -->
        <el-table ref="tableRef" :data="deptList" row-key="deptId" :lazy="true" :load="load"
            :tree-props="{ children: 'children', hasChildren: 'existSub' }" :expand-row-keys="expandRowKeys"
            @row-click="(row, column, e) => clickRowLoad(row, column, e)" @expand-change="handleExpandChange">
            <el-table-column prop="deptName" label="名称" min-width="260" />
            <el-table-column prop="orderNum" label="排序" />
            <el-table-column label="创建时间" align="center" prop="createTime" min-width="200">
                <template slot-scope="scope">
                    <span>{{ (scope.row.createTime) }}</span>
                </template>
            </el-table-column>
            <el-table-column label="操作" align="center" fixed="right" min-width="220">
                <template slot-scope="scope">
                    <el-button size="mini" type="primary" @click.stop="clickHandle(scope.row)">查看</el-button>
                </template>
            </el-table-column>
        </el-table>

    </div>
</template>
  
<script>

export default {
    name: "TablePage3",
    data() {
        return {
            // 模拟数据1
            deptList_01: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 2104,
                    "deptName": "部门1",
                    "parentName": null,
                    "parentId": 0,
                    "orderNum": 0,
                    "children": [],
                    "existSub": true,
                },
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 2105,
                    "deptName": "部门2",
                    "parentName": null,
                    "parentId": 0,
                    "orderNum": 1,
                    "children": [],
                    "existSub": true,
                },
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 2106,
                    "deptName": "部门3",
                    "parentName": null,
                    "parentId": 0,
                    "orderNum": 2,
                    "children": [],
                    "existSub": false,
                }
            ],
            // 模拟数据2
            deptList_02: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 21041,
                    "deptName": "部门1-1",
                    "parentName": null,
                    "parentId": 2104,
                    "orderNum": 1,
                    "children": [],
                    "existSub": false,
                },
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 21042,
                    "deptName": "部门1-2",
                    "parentName": null,
                    "parentId": 2104,
                    "orderNum": 1,
                    "children": [],
                    "existSub": false,
                },
            ],
            // 模拟数据3
            deptList_03: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 21051,
                    "deptName": "部门2-1",
                    "parentName": null,
                    "parentId": 2105,
                    "orderNum": 1,
                    "children": [],
                    "existSub": true,
                },
            ],
            // 模拟数据4
            deptList_04: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 210511,
                    "deptName": "部门2-1-1",
                    "parentName": null,
                    "parentId": 21051,
                    "orderNum": 1,
                    "children": [],
                    "existSub": false,
                },
            ],
            // 部门表格树数据
            deptList: [],
            // 重新渲染表格状态
            refreshTable: true,
            //父级的Id
            parentId: '',
            expandRowKeys: [],

        };
    },
    mounted() {
        // 列表
        this.getList()
    },
    methods: {
        /** 查询列表 懒加载 */
        getList() {
            //根据实际项目调用接口
            // lazyList(this.queryParams).then(response => {
            //     console.log(response, 'response查询列表')
            //     this.deptList = response.data
            // }) 

            // 模拟数据1
            this.deptList = this.deptList_01;
            this.deptList.forEach(item => {
                item.hasChildren = item.existSub
            })
            // 如果只是单纯的更新绑定的数据:是在重新加载时,清空对应ref下的这两个数据
            // this.$set(this.$refs["tableRef"].store.states, "lazyTreeNodeMap", {});
            // this.$set(this.$refs["tableRef"].store.states, "treeData", {});

            console.log(this.deptList, ' this.deptList')
            // ------------触发点击事件load------------------
            //一、-------默认展开了deptList的第一层所有数据的下级数据--------
            // 一、-------默认展开了deptList的第一层所有数据的下级数据(相当于自动点击了一次)--------
            this.openTreeHandle(this.deptList)

            //二、 展开所有行,(建议直接使用非懒加载,配置default-expand-all为true)

        },
        // 点击列表懒加载
        load(tree, treeNode, resolve) {
            console.log(tree, 'tree')
            // console.log(treeNode, 'treeNode')
            //根据实际项目调用接口,获取对应的下级数据
            // this.parentId = tree.deptId
            // lazyList(this.queryParams).then(res => {
            // console.log(res.data, 'res.data')
            // resolve(res.data)
            // })

            // 模拟数据2,模拟数据3, 模拟数据4
            let tempList = []
            if (tree.deptName == '部门1') {
                tempList = this.deptList_02
            } else if (tree.deptName == '部门2') {
                tempList = this.deptList_03
            } else if (tree.deptName == '部门2-1') {
                tempList = this.deptList_04
            }

            resolve(tempList)

        },

        // 一、-------根据接口得到deptList,根据实际需要获取需要展开的节点的id,也就是table绑定的row-key属性值(如deptId)--------
        openTreeHandle(deptList) {
            const deptId = deptList ? deptList.map(item => (item.deptId).toString()) : []
            // expandRowKeys 可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组
            // 这个必须配置,只有配置了这个,getElementsByClassName才能获取到对应的数据els,下面click事件才会触发
            this.expandRowKeys = this.expandRowKeys.concat(deptId)
            console.log(this.expandRowKeys, ' this.expandRowKeys')
            const els = document.getElementsByClassName('el-table__expand-icon el-table__expand-icon--expanded')
            this.$nextTick(() => {
                console.log(els, 'els')
                console.log(els.length, 'els.length')
                if (els.length > 0) {
                    for (let i = 0; i < els.length; i++) {
                        els[i].click()
                    }
                }
            })
        },
        // 展开改变触发函数,只展开一行
        handleExpandChange(row, expandedRows) {
            // console.log(row, 'row')
            // console.log(expandedRows, 'expandedRows')
            if (expandedRows.length > 1) {
                this.$refs.tableRef.toggleRowExpansion(expandedRows[0])
            }
        },
        //点击整行load (能够点击一行的任意位置都可以进行伸缩)
        clickRowLoad(r, c, e) {
            if (e.currentTarget && e.currentTarget.firstElementChild.firstElementChild.firstElementChild) {
                console.log(e.currentTarget, 'e.currentTarget')
                if (e.currentTarget.firstElementChild.firstElementChild.firstElementChild.tagName == 'DIV') {
                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.click()
                } else {
                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.nextElementSibling.click()
                }
            }

        },
        clickHandle(row) {
            console.log(row, '点击')
        },
    },
};
</script>
  

2. 效果图

element的Table表格组件树形数据与懒加载简单使用,Element,javascript,前端,vue.js,elementui文章来源地址https://www.toymoban.com/news/detail-779989.html

3. 解决新增、删除、修改之后树节点不刷新问题。(参考文章)

到了这里,关于element的Table表格组件树形数据与懒加载简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)

    以下是一个简单的示例代码,演示如何在Vue中使用Element UI的Table组件实现嵌套表格: 上面的代码通过type=\\\"expand\\\"设置了一个展开按钮,点击该按钮会显示与当前行关联的子表格内容。 在上面的示例中,我们定义了一个包含姓名和年龄的主表格,以及一个展开列用于显示与每行

    2024年02月02日
    浏览(39)
  • element ui 树形-懒加载-表格-多选 勾选问题

            row-key=\\\"id\\\"         lazy         :load=\\\"load\\\"         :tree-props=\\\"{           children: \\\'children\\\',           hasChildren: \\\'hasChildren\\\',         }\\\" 1、勾选父级时子级不会勾选上 一般我们实现表格多选功能是这样的:这里不再使用这种方式  第一步:需要我们手动写个勾选表头

    2023年04月09日
    浏览(29)
  • vue中element-ui表格组件el-table封装,在table表格中插入图片

            这次写的项目是写后台管理系统这部分,对于后台管理使用vue写,用组件的话,table组件用得次数比较多,可以封装一个table组件。         1.如封装的table组件:  :prop=\\\"item.prop\\\"  :label=\\\"item.label\\\"是必须要有的,其他的可以根据自己需要写 。 2.封装之后是就是使

    2024年02月15日
    浏览(40)
  • Element UI 中的Table表格组件自定义行高与整个表格自适应高度

    1、:header-row-style=\\\"{height:\\\'30px\\\'}\\\" 设置表格列标题的高度为30像素。 2、:header-cell-style=\\\"{background:\\\'#f5f7fa\\\',padding:\\\'0px\\\'}\\\" 设置表格列标题的背景颜色。 3、:row-style=\\\"{height:\\\'30px\\\'}\\\" 设置每行的高度为30像素。 4、height=\\\"calc(100vh - 150px)\\\" 设置整个表格的高度。因为要自适应所以这个高度要用

    2024年02月12日
    浏览(38)
  • form-generator扩展原生表格,element-table,子表单等组件

    form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但form-generator提供组件并不能满足我们在项目中的使用,比如表格组件,el-table,子表单等等,

    2024年02月15日
    浏览(33)
  • 基于 Vue3 + Webpack5 + Element Plus Table 二次构建表格组件

    基于 Vue3 + Webpack5 + Element Plus Table 二次构建表格组件,开箱即用 A Vue 3.x Table Component built on Webpack 5 该组件库可供学习、参考和用于二次开发。 1.基于 Webpack 5 构建 2.全面支持 Vue 3 3.支持 JSON 序列化表格快速配置 4.已内置 Pagination 分页 5.支持自定义 prop 列名 6.支持单元格内容自

    2024年04月13日
    浏览(63)
  • Vue3 - Element Plus 表格组件 table 隐藏鼠标移入时 hover 高亮背景色,el-table 组件去除鼠标悬停在表格行的 hover 高亮效果(完美解决表格合并后导致行错位)

    网上都是老文章了,本文提供的方案 100% 解决此问题。 本文 实现了在 vue3 + element plus 项目开发中,表格组件 el-table 鼠标移入时隐藏 hover 悬停高亮效果,当鼠标滑动到表格行时不要任何效果! 同时也解决了 “表格合并” 后带来的 hover 错位、异常显示等。 如下图所示,当鼠

    2024年02月21日
    浏览(46)
  • vue | element-ui中 如何修改表格Table组件中滚动条的样式

    在Table表格中,当内容超出容器时就会出现滚动条,elemnt-ui自带的滚动条有时无法满足需求,那么我们可以通过css伪类来实现对滚动条的自定义。 滚动条由两部分组成的: 滑块:可以滑动的部分。 轨道:滚动条的轨道,即滑块的轨道。一般来说滑块的颜色比轨道的颜色深一

    2024年02月11日
    浏览(42)
  • element-ui的table实现滚动加载,涵el-table组件封装一份

    重点就是 a d d R o l l L i s t e n e r addRollListener a d d R o l l L i s t e n e r 函数,想快点弄上去看效果的直接弄这个函数吧 如果不在mounted中则一定要this.$nextTick(() = this.addRollListener()) 示例代码 如果你把上面的看过了;只需要在 a d d R o l l L i s t e n e r addRollListener a d d R o l l L i s t e

    2023年04月08日
    浏览(39)
  • 【JaveWeb教程】(8)Web前端基础:Vue组件库Element之Table表格组件和Pagination分页组件 详细示例介绍

    接下来我们来学习一下ElementUI的常用组件,对于组件的学习比较简单,我们只需要参考官方提供的代码,然后复制粘贴即可。本节主要学习Tbale表格组件和Pagination分页组件 Table 表格:用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。 接下来

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包