el-table懒加载实现添加下级、编辑、删除更新页面

  

实现思路

  • 1、设置 Table 的 lazy 属性为 true 与加载函数 load 。通过指定 row 中的 hasChildren 字段来指定哪些行是包含子节点。children 与 hasChildren 都可以通过 tree-props 配置。
  • 2、将hasChildren 始终设置为true,当返回数据为空时,箭头消失,显示.el-table__placeholder控制的小圆点。
  • 3、mounted中调用getList()获取一级数据
  • 4、点击箭头时,调用loadFrame加载函数,获取当前节点的子级数据,通过resolve(data)渲染到页面上。同时,将loadFrame方法中点击加载子节点时信息保存到mapData中。
  • 5、添加、编辑、删除成功后,调用updatePage()。mapData中保存着点击过的节点信息,而局部更新页面就是通过找到当前节点的父级,调用loadFrame()来实现的。

代码

 html

<el-table :data="tableData" row-key="id" lazy :load="loadFrame" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :default-expand-all="false" class="frameTable">
         <!--表格内容-->          
</el-table>

css

<style scoped lang="scss">
.frameTable {
    .el-table__placeholder {
        display: inline-block;
        width: 7px;
        height: 7px;
        border-radius: 50px;
        background: #cbd0db;
        margin: 8px 8px 0;
    }
}
</style>

js

        //data中定义
        mapData:new Map()
        // 表格列表数据(一级)
        getList() {
            showSubjectList(this.doseach()).then(res => {
                if (res.status == 1) {
                    res.value.subjectList.forEach(item => {
                        item.hasChildren = true;
                    });
                    this.tableData = res.value.subjectList;
                }
            });
        },
        // 加载(子级数据)
        loadFrame(tree, treeNode, resolve) {
            this.mapData = this.mapData.set(tree.id, { tree, treeNode, resolve });
            selectChildrenSubjectByParentId({ parentId: tree.id }).then(res => {
                if (res.status == 1) {
                    res.value.forEach(item => {
                        item.hasChildren = true;
                    });
                    resolve(res.value);
                }
            });
        },
        //更新页面(添加编辑删除后调用该方法,val为当前行的数据)
        updatePage(type, val) {
            let id = 0;
            if (type == 'edit' || type == 'open') {//编辑/删除
                id = val.parentId;
                if (this.mapData.has(id)) {// 点击过
                    const { tree, treeNode, resolve } = this.mapData.get(id);
                    this.loadFrame(tree, treeNode, resolve);
                } else {// 未点击
                    this.getList();
                }
            } else if (type == 'add') {//添加一级数据
                this.getList();
            } else if (type == 'addSon') {//添加子级
                id = val.id;
                if (this.mapData.has(id)) {// 点击过
                    const { tree, treeNode, resolve } = this.mapData.get(id);
                    this.loadFrame(tree, treeNode, resolve);
                }
            }
        },

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
el-table懒加载可以通过以下步骤实现: 1. 在el-table中设置lazy属性为true,表示开启懒加载模式。 2. 在el-table中设置load方法,该方法会在表格滚动到底部时触发,用于加载更多数据。 3. 在load方法中发送异步请求,获取更多数据,并将数据添加到表格中。 4. 在load方法中设置isLoading属性为true,表示正在加载数据,加载完成后再将isLoading设置为false。 下面是一个简单的示例代码: ``` <template> <el-table :data="tableData" :lazy="true" @load="handleLoad" :loading="isLoading"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [], isLoading: false, currentPage: 1, totalPage: 0 }; }, methods: { handleLoad() { if (this.currentPage > this.totalPage) { return; } this.isLoading = true; //发送异步请求获取数据,假设每次获取10条数据 setTimeout(() => { //假设total为总共的数据量 const total = 100; const newData = []; for (let i = (this.currentPage - 1) * 10; i < this.currentPage * 10; i++) { if (i >= total) { break; } newData.push({ name: `name${i}`, age: i }); } this.tableData = this.tableData.concat(newData); this.totalPage = Math.ceil(total / 10); this.currentPage++; this.isLoading = false; }, 1000); } } }; </script> ``` 在这个例子中,我们通过设置lazy属性为true和load方法来实现懒加载。handleLoad方法会在表格滚动到底部时触发,然后发送异步请求获取更多数据,并将数据添加到表格中。isLoading属性用于表示是否正在加载数据。currentPage和totalPage用于表示当前页和总页数。在加载数据时,我们通过计算currentPage和totalPage来判断是否已经加载完所有数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值