vue项目中实现element表格懒加载删除、修改、新增动态渲染

这几天开发遇到了表格懒加载删除修改之后数据不刷新的问题,解决了之后笔记记一下。方便后面遇到相似的问题能回来找一下思路,也希望能帮助到更多的朋友们~

  • 大致思路

表格懒加载的实现可以看element官网,这里只说一下懒加载的动态渲染问题。
实现了表格懒加载后,节点在第一次懒加载时会请求接口获取数据,然后将本次加载出来的数据进行存储,等你下次进行节点访问时,直接从中拿数据就可以了,不会做接口请求。
所以,我们要针对懒加载表格的数据存储做操作,大致的实现思路:每当我们进行新增、修改、删除操作后,我们就将当前节点父节点下的存储数据清空,手动再次请求接口数据,然后进行数据渲染就可以了。

  • 删除的动态渲染

首先我们要声明一个treeObj对象来存储我们加载过的节点,然后我们进行删除操作时,从中拿到操作节点的父节点对象(this.$refs.pager.store.states.lazyTreeNodeMap,不同框架的表格会有不同的取法,主要就是找到lazyTreeNodeMap),将父节点的子节点全部清空,然后手动进行懒加载请求得到数据重新渲染。

export default {
  data() {
    return {
      treeObj: {}  // 声明一个对象,来存储懒加载后的每一个节点对象。
    }
  },
  methods: {
    async loadTable(tree, treeNode, resolve) {  // 表格懒加载方法
      this.treeObj[tree.id] = { tree, treeNode, resolve }  // 将本次节点对象存储到maps对象中
      const data = {
        page: { pageSize: 10, pageNum: 1 },
        params: { mid: '123456', id: tree.id }
      }
      // 请求接口,获取数据
      const loadChildren = await this.$api.request('pager/data', { data }) 
      // 数据映射,得到自己想要的数据格式
      if (Array.isArray(loadChildren) && loadChildren.length > 0) { 
        loadChildren.forEach((item) => {
          item.rowid = tree.rowid + '.' + item.rowid
        })
        resolve(loadChildren)  // 返回最终数据对象
      } else {
        tree.children = []
        resolve([])
      }
    },
    deleteRow(row) {  // 表格删除方法
     this.$confirm('是否确认删除该标签分类?', '提示', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
     })
      .then(async () => {
        const params = {
          data: {
            id: row.id
          }
        }
        try {
          await this.$api.request('pager/delete', params)
          this.searchTableData()  //表格刷新
          if (row.fjd === '001') return  // 如果是顶级节点的删除操作,就不需要进行下面的操作了。
          // 处理懒加载节点,先清空再渲染。
          // 利用refs得到表格的数据结构,拿到 lazyTreeNodeMap 这个懒加载对象。
          // 这里面存储的就是你之前加载的所有节点数据对象了。然后清空操作节点的父节点对象。
          this.$refs.pager.store.states.lazyTreeNodeMap[
            row.fjd
          ] = []  
          // 根据我们声明的maps对象,拿到父节点。然后手动进行接口请求,重新进行数据渲染。
          const { tree, treeNode, resolve } = this.treeObj[row.fjd] 
          this.loadTable(tree, treeNode, resolve)
          this.$message.success('删除成功')
        } catch (e) {
          this.$message.warning(e.message)
        }
      })
      .catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
       })
      })
  }
  }
}

上面是删除操作的动态渲染,新增,修改同理。主要就是一个先清空、再重新渲染的过程。

撒花~~~~❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在Vue使用Element UI的Tree组件并实现懒加载,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了VueElement UI,并在您的项目引入它们。 2. 在需要使用Tree组件的Vue文件,先引入Tree组件和相关的样式: ```javascript import { Tree } from 'element-ui'; import 'element-ui/lib/theme-chalk/tree.css'; ``` 3. 在Vue组件注册Tree组件: ```javascript export default { components: { 'el-tree': Tree }, // ... } ``` 4. 在模板使用Tree组件,并设置相关属性和事件: ```html <template> <div> <el-tree :data="treeData" :load="lazyLoad" :lazy="true" :expand-on-click-node="false" @node-click="handleNodeClick" ></el-tree> </div> </template> ``` 在上面的代码,我们通过`:data`属性将树的数据传递给Tree组件。`:load`属性用于指定懒加载函数,`:lazy`属性设置为`true`以启用懒加载功能,而`:expand-on-click-node`属性设置为`false`以禁用节点点击展开功能。同时,我们还可以通过`@node-click`事件处理节点的点击操作。 5. 在Vue组件的方法定义懒加载函数和节点点击事件处理方法: ```javascript export default { // ... methods: { lazyLoad(node, resolve) { // 模拟异步请求 setTimeout(() => { const children = [ { id: 1, label: '节点1' }, { id: 2, label: '节点2' }, { id: 3, label: '节点3' } ]; resolve(children); }, 1000); }, handleNodeClick(node) { console.log('点击了节点:', node); } } } ``` 在上面的代码,`lazyLoad`方法模拟了一个异步请求,通过`resolve`函数将加载到的子节点数据传递给Tree组件。`handleNodeClick`方法用于处理节点的点击事件,您可以根据需要进行相应的处理。 这样,您就可以在Vue使用Element UI的Tree组件并实现懒加载了。请注意,上述代码的数据和延时仅作为示例,您可以根据实际需求进行调整。希望对您有所帮助!如果您还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值