• antdv 树形穿梭框,支持搜索


    本文地址:https://www.cnblogs.com/veinyin/p/14340241.html

    不适用多级树状穿梭框,本文基于两层树实现,全文没有代码,只有思路,如果有更好的实现方式,欢迎留言

    一、需求:

    1. 穿梭框左右侧均为省市树(只有两个层级),支持搜索

    2. 某城市从左侧移到右侧后,左侧不再展示该城市

    3. 移动省下部分城市,左右侧这个省都要作为父节点展示

     

    左右两侧都有湖北这个父节点,武汉、黄石、十堰已移到右侧,左侧不再展示

     

    二、技术方案

    优先选择框架已有组件,查看 antdv 示例,效果如下

    根据示例可知,穿梭框列表可以自定义,通过插槽展示,未做树搜索,要测试一下自带的能不能用

    在示例代码上测试,发现树的展示数据需要前端维护, Transfer 搜索只能搜索最外层,无法搜索子节点,也需要前端实现

    因此需要实现的内容包括:左右两棵树的展示,树的搜索过滤,移动之后的节点处理(隐藏、展示、父节点的处理)

    三、实现细节

    通过接口获取左右两棵树的原始数据后,就要考虑展示问题了。

    1. 子节点移动之后如何剔除

    2. 对一个父节点来说,移动是否还有子节点,是否需要剔除父节点,甚至右侧移动过来的节点如何插到父节点下,是否需要新增父节点

    3. 搜索,如果匹配到父节点,子节点是否保留,匹配子节点后,剔除空的父节点

    4. 左右都移动之后的搜索怎么展示

    ...等等交互

    因为是通过插槽控制穿梭框左右两侧的展示内容,这两棵树几乎完全可以由前端控制

    对穿梭框,需要记录移到右侧的项:

    1. targetKeys - 记录右侧的所有 key,只有编码 list

    2. targetList - 包括每一项详细信息的 list

    对左右两棵树,都需要这些字段:

    1. keyword - 搜索关键字

    2. showData - 最终用于展示的数据

    3. originalData - 原始数据

    4. checkedKeys - 树中勾选项

    5. expandedKeys - 树中展开的父节点

    考虑到只有两层,可以先将左右两棵树拍平,合并得到 totalList,totalList 就是左右两棵树共享的数据,数组的差集和过滤比树结构要好做很多

    左侧树的数据 = 全部数据 - targetList,如果搜索,就将上一步得到的 list 过滤一下,最后将数组转成树结构(showData)

    右侧同理,就是 targetList,搜索的话就再过滤下,最后转为树结构

    需要计算左右侧展示数据的场景:初始化、移动、搜索

    数组转树的过程中可以同时获取 expandedKeys,比如右侧总是打开状态,左侧只有在搜索时展开父节点

  • 相关阅读:
    magic_quotes_gpc(魔术引号开关)
    获取文件绝对路径:__FILE__与 $_SERVER[SCRIPT_FILENAME''] 的 区别
    小程序wx:key中的关键字*this
    swiper 更改indicator-dots 属性 隐藏面板指示点
    B站视频下载
    makefile教程
    Qt 中配置 c99的问题
    C语言编译过程及相关文件
    go语言入门(10)并发编程
    go语言入门(9)文本文件处理
  • 原文地址:https://www.cnblogs.com/veinyin/p/14340241.html
Copyright © 2020-2023  润新知