el-tree新增、编辑、删除节点后如何做到局部刷新el-tree

前提需要: 

  • 这里新增、编辑、删除都和el-tree是分开的,所以获取node之类的都需要单独获取。
  • 其中新增与编辑,因为不是懒加载的tree树,小编与后端协调后决定,新增与编辑成功后,接口会返回当前新增或编辑的数据,及其子节点, 如:

  •  这是在新增后,后端返回接口的接口,例如:在产品下新增产品经理。
  • 如果是在编辑有子节点的数据时,就会返回与图相同的数据。
  • 如果编辑没有子级节点的数据,就会返回:

 

问题还原图:

问题描述:

  • 在新增、编辑、删除时,只刷新当前修改的节点,不刷新整个tree树。
  • 新增与编辑都需要借助后端同事的帮助,而删除则是前端逻辑实现。
  • 但都是需要发送请求的哦!这样才能保证是最新的数据哦!!

解决方法:

  • 删除功能 :

思路:

通过找到要删除父节点的所有数据,再通过相同的id用 .splice(index, 1) 删除节点。

代码:

  • methods中
// 接口返回200后才开始删除
if (res.code === 200) {
  // 获取当前被选中节点的 key,必须设置 node-key 属性
  const nodeId = this.$refs.tree.getCurrentKey()
  // 根据 data 或者 key 拿到 Tree 组件中的 node
  const node = this.$refs.tree.getNode(nodeId)
  // 找到相同的id
  const parent = node.parent
  const children = parent.data.children || parent.data
  const index = children.findIndex(d => d.id === node.data.id)
  // 删除
  children.splice(index, 1)
}
  • 新增功能 与 编辑功能 :

思路:

  • 这里都用编辑为例
  • 首先,点击新增或编辑时会弹出弹框 this.dialogVisible =  true (这里编辑与新增用的同一个弹框)
  • 点击tree树时通过 @node-click="getTreeChildren" 获取 recordNode 
  • 按照正常的逻辑走,点击确定后触发 @close="close" 关闭弹框并触发 @editorSuccess="editorSuccess" 方法实现局部刷新。

代码:

  • html中代码:
<el-dialog
  v-if="dialogVisible"
  :title="dialogTitle"
  :visible.sync="dialogVisible"
>
  <organizationDialog
    :is="pathOrganization"
    ref="add"
    :echo="echo"
    :dialog-title="dialogTitle"
    :organization-name="organizationName"
    :folder-id="folderId"
    @close="close"
    @editorSuccess="editorSuccess"
    @addSuccess="addSuccess"
  />
</el-dialog>

 

  • methods中: 

        点击树获取到 recordNode 

// 点击树
getTreeChildren(node, treeNode) {
  console.log('recordNode', node, treeNode)
  recordNode = treeNode
}

         此时 node 与 recordNode  的打印结果:

        编辑成功后触发: 

editorSuccess() {
  var formData = this.$refs.add.setEditorData
  recordNode.setData({
    id: formData.id,
    name: formData.name,
    organizationNo: formData.organizationNo,
    parentId: formData.parentId,
    parentName: formData.parentName,
    children: formData.children
  })
},

this.$refs.add.setEditorData  -----  是接口发送成功后,后端返回的data,为对象。

recordNode.setData({})中的内容是小编发送的数据的内容,同时后端的返回中有这些。

 

 

  • 弹框的methods中,点击确定后,发送请求接口返回200 :
if ( res.code === 200 ) {
  this.setEditorData = res.data
  this.$emit('editorSuccess')
  this.$emit('close')
}

 总结:

@node-click:节点被点击时的回调,有三个参数

  • 传递给 data 属性的数组中该节点所对应的对象
  • 节点对应的 Node
  • 节点组件本身

.setData():在节点对应的 Node 中的 Prototype  中自带的一个方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值