elementPlus + table 树形懒加载,子节点的刷新

文章目录

需求描述

一个树形表格的增删查改

技术细节

刚开始想的很好,新增/编辑/删除时不调用接口,而是直接更改数据,如删除时,直接删除对应下标的数据
遇到的问题

  1. 实际业务中是否有子级,是不确定的-这个好解决,判断一下就行
  2. 通过load接口获取到的子项,使用proxy.$refs.table.store.states.lazyTreeNodeMap.value获取不到节点
  3. 通过proxy.$refs.table.store.states.treeData.value可以获取到节点数据,但是不能触发更新
  4. 最后使用了最简单的方式,新增,删除,编辑完成后,直接使用proxy.$refs.table.store.loadOrToggle(row)重新触发load调接口
javascript 复制代码
<template>
  <div>

    <el-table :data="tableData1" style="width: 100%" row-key="id" border lazy :load="load"
      :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" ref="table">
      <el-table-column prop="date" label="Date" />
      <el-table-column prop="name" label="Name" />
      <el-table-column prop="address" label="Address" />
      <el-table-column prop="address" label="Address" width="270">
        <template #default="scope">
           <el-button type="primary" size="small" @click="handleAdd(scope.row)">
            add
          </el-button>
           <el-button type="primary" size="small" @click="handleAdd2(scope.row)">
            add2
          </el-button>
          <el-button size="small" @click="handleEdit(scope.row)">
            Edit
          </el-button>
          <el-button size="small" type="danger" @click="handleDelete(scope.row)">
            Delete
          </el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script setup>
import {onMounted,ref,getCurrentInstance} from 'vue';
const {proxy} = getCurrentInstance();

const handleEdit = ((row) => {
  console.log(row)
})
const handleDelete = ((row) => {
  console.log(row)
})
const handleAdd = ((row) => {
console.log(proxy.$refs.table.store.states.treeData.value)
console.log(proxy.$refs.table.store.states.lazyTreeNodeMap.value)
 // proxy.$refs.table.store.states.treeData.value[row.id].loaded = false;
  proxy.$refs.table.store.states.treeData.value[row.id].loaded = false
  proxy.$refs.table.store.loadOrToggle(row)
})
const handleAdd2 = ((row) => {
  
})
const load = (
  row,
  treeNode,
  resolve
) => {
  console.log(row)
  setTimeout(() => {
    resolve([
      {
        id: `${row.id}_31`,
        date: '2016-05-01',
        name: 'wangxiaohu',
        address: 'No. 189, Grove St, Los Angeles',
        hasChildren: true,
      },
      {
        id: `${row.id}_32`,
        date: '2016-05-01',
        name: 'wangxiaohu',
        address: 'No. 189, Grove St, Los Angeles',
        hasChildren: true,
      },
    ])
  }, 1000)
}


const tableData1 = [
  {
    id: 11,
    date: '2016-05-02',
    name: 'wangxiaohu',
    address: 'No. 189, Grove St, Los Angeles',
    hasChildren: true,
  },
  {
    id: 2,
    date: '2016-05-04',
    name: 'wangxiaohu',
    hasChildren: true,
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 3,
    date: '2016-05-01',
    name: 'wangxiaohu',
    hasChildren: true,
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 4,
    date: '2016-05-03',
    name: 'wangxiaohu',
    hasChildren: true,
    address: 'No. 189, Grove St, Los Angeles',
  },
]
</script>

小结

关键点在于:proxy.$refs.table.store.loadOrToggle(row)

相关推荐
Fly1 小时前
我来提需求,你带着 Codex 做项目:AI 全栈课程开始实战了
前端
集智飞行1 小时前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
w2sfot2 小时前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
HSunR2 小时前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
知野小兔2 小时前
Vuex和Pinia状态管理
vue.js
拆房老料3 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
VX_bysjlw9853 小时前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
Solis程序员3 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明3 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8884 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word