vue封装tree组件实现搜索功能

 更新时间:2023年05月15日 10:27:19   作者:code_Bo  
本文主要介绍了vue封装tree组件实现搜索功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我使用的是 vue2 + antd, 那么 antd 的 tree 组件中没有给我们封装搜索,其官网提供的搜索也不是封装好的,而且限制比较大,因为我的树形进来要默认展开,官方的代码是进行了响应式,就不能上来就全部展开了

iShot_2023-05-09_18.57.35.png

可以看一下,官方的代码是这样的,灵活性很低的还是

那我们自己来根据这个思路,进行一下改装, 首先看一下最终呈现是啥样的:

iShot_2023-05-09_19.00.39.png

如上图,可以看到我们刚进来的时候,就默认是全部展开的,然后上面有一个搜索框,这里我们可以自己定义交互,可以绑定成搜索的回车事件,也可以绑定change事件, 思路就是当我们搜索以后,重置我们下面 tree 树形的 输入数据 data,这样就简单的实现了搜索以后显示指定的树形。

这里面复杂的地方在于那个递归,因为递归的时候我们需要得到 1、 一个新数据 2、搜索子级的时候也要全部的父级 3、 搜索父级的时候也要全部的子级,下面来看看代码

首先是vue模板中的代码

<a-input-search
  style="margin-bottom: 2px"
  placeholder="搜索"
  @change="searchOrg"
  :allowClear="true"
  v-model="searchPerson"
></a-input-search>
<a-tree class="tree_box" ref="tree" @select="onSelect" :tree-data="currentTree" default-expand-all />

从这里可以看出来,我们封装的要比官方的轻量很多,ref 和 这里的逻辑是没有涉及的,可以删掉。

接下来看我们的业务代码

<script>
export default {
  props: {
    treeList: {
      type: Array,
      default: () => []
    },
  },
  data() {
    return {
      searchPerson: '',
      currentTree: this.treeList,
    }
  },
  methods: {
    searchTree(tree, keyword, includeChildren = false) {
      const newTree = []
      for (let i = 0; i < tree.length; i++) {
        const node = tree[i]
        if (node.title.includes(keyword)) {
          // 如果当前节点符合条件,则将其复制到新的树形结构中,并根据 includeChildren 参数决定是否将其所有子节点也复制到新的树形结构中
          newTree.push({ ...node, children: includeChildren ? this.searchTree(node.children || [], '', true) : [] })
        } else if (node.children) {
          // 如果当前节点不符合条件且存在子节点,则递归遍历子节点,以继续搜索
          const result = this.searchTree(node.children, keyword, true)
          if (result.length > 0) {
            // 如果子节点中存在符合条件的节点,则将其复制到新的树形结构中
            newTree.push({ ...node, children: result })
          }
        }
      }
      return newTree
    },
    searchOrg() {
      this.currentTree = this.searchTree(this.treeList, this.searchPerson, true)
    },
    async onSelect(selectedKeys, info) {
    },
  }
}
</script>

这里我的 tree-data 使用的是父组件传入的 props , 因为我们后期要更改数据,所以不能直接使用,要接一下, 在用户输入的时候,重置数据即可, 主要依赖于 searchTree 这个递归的方法,第三个参数是一个布尔值, 默认是 false ,当搜索到符合条件的父级节点时,除了将该节点复制到新的树形结构中,还会根据 includeChildren 参数决定是否将其所有子节点也复制到新的树形结构中。如果 includeChildren 参数为 true,则递归遍历其所有子节点,并将其复制到新的树形结构中。如果 includeChildren 参数为 false,则不会递归遍历其子节点,只会将符合条件的父节点复制到新的树形结构中。

最终在我们搜索的时候可以呈现以下效果:

iShot_2023-05-09_19.12.40.png

当我们想从新获取全部的时候,只需要情况输入框即可,这样我们的递归方法会把完整的树形返回给我们~

到此这篇关于vue封装tree组件实现搜索功能的文章就介绍到这了,更多相关vue tree搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2.0 实现导航守卫(路由守卫)

    vue2.0 实现导航守卫(路由守卫)

    vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards)。这篇文章主要介绍了vue2.0 实现导航守卫(路由守卫)的相关知识,需要的朋友可以参考下
    2018-05-05
  • vue中各种通信传值方式总结

    vue中各种通信传值方式总结

    在本篇文章里小编给大家分享了关于vue中各种通信传值方式的相关知识点,有兴趣的朋友们学习下。
    2019-02-02
  • vue中axios利用blob实现文件浏览器下载方式

    vue中axios利用blob实现文件浏览器下载方式

    这篇文章主要介绍了vue中axios利用blob实现文件浏览器下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • vue用h()函数创建Vnodes的实现

    vue用h()函数创建Vnodes的实现

    Vue提供了一个h()函数用于创建vnodes,本文就来介绍一下vue用h()函数创建Vnodes的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • vue.js整合mint-ui里的轮播图实例代码

    vue.js整合mint-ui里的轮播图实例代码

    这篇文章主要介绍了vue.js整合mint-ui里的轮播图的方法,首先我们需要初始化vue项目,然后安装mint-ui。具体内容详情大家通过学习
    2017-12-12
  • element ui富文本编辑器的使用效果与步骤(quill-editor)

    element ui富文本编辑器的使用效果与步骤(quill-editor)

    富文本编辑器在任何项目中都会用到,在Element中我们推荐vue-quill-editor组件,下面这篇文章主要给大家介绍了关于element ui富文本编辑器的使用效果与步骤(quill-editor)的相关资料,需要的朋友可以参考下
    2022-10-10
  • vue中标签自定义属性的使用及说明

    vue中标签自定义属性的使用及说明

    这篇文章主要介绍了vue中标签自定义属性的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue data中的return使用方法示例

    vue data中的return使用方法示例

    当一个组件被定义,data必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例,下面这篇文章主要给大家介绍了关于vue data中return使用,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • VUEJS实战之修复错误并且美化时间(2)

    VUEJS实战之修复错误并且美化时间(2)

    这篇文章主要为大家详细介绍了VUEJS实战之修复错误并且美化时间,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • el-table表头根据内容自适应完美解决表头错位和固定列错位

    el-table表头根据内容自适应完美解决表头错位和固定列错位

    这篇文章主要介绍了el-table表头根据内容自适应完美解决表头错位和固定列错位,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论