当前位置:首页 > VUE

tree模糊搜索实现vue

2026-02-22 20:31:06VUE

实现 Vue 中的 Tree 模糊搜索

在 Vue 中实现 Tree 组件的模糊搜索功能,可以通过过滤树节点数据来实现。以下是一个完整的实现方法:

核心思路

  1. 递归遍历树结构,检查每个节点的 label 是否包含搜索关键词
  2. 如果节点匹配,保留该节点及其所有父节点
  3. 对于不匹配的节点,检查其子节点是否有匹配项

实现代码

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索内容" />
    <el-tree
      :data="filteredTreeData"
      :props="defaultProps"
      node-key="id"
      default-expand-all
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchText: '',
      treeData: [
        {
          id: 1,
          label: '一级 1',
          children: [
            { id: 4, label: '二级 1-1', children: [] }
          ]
        },
        {
          id: 2,
          label: '一级 2',
          children: [
            { id: 5, label: '二级 2-1', children: [] },
            { id: 6, label: '二级 2-2', children: [] }
          ]
        }
      ],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  computed: {
    filteredTreeData() {
      if (!this.searchText) return this.treeData
      return this.filterTree(this.treeData, this.searchText.toLowerCase())
    }
  },
  methods: {
    filterTree(nodes, searchText) {
      return nodes.filter(node => {
        const match = node.label.toLowerCase().includes(searchText)
        if (node.children && node.children.length) {
          const filteredChildren = this.filterTree(node.children, searchText)
          if (filteredChildren.length) {
            node.children = filteredChildren
            return true
          }
        }
        return match
      })
    }
  }
}
</script>

性能优化

对于大型树结构,可以考虑以下优化措施:

  1. 添加防抖处理搜索输入
  2. 使用虚拟滚动只渲染可见节点
  3. 对树数据进行扁平化处理加速搜索
// 防抖实现示例
import { debounce } from 'lodash'

watch: {
  searchText: debounce(function(newVal) {
    this.searchText = newVal
  }, 300)
}

扩展功能

  1. 高亮匹配的文本
  2. 支持多字段搜索
  3. 添加搜索结果的统计信息
// 高亮匹配文本示例
highlightText(label, searchText) {
  if (!searchText) return label
  const reg = new RegExp(`(${searchText})`, 'gi')
  return label.replace(reg, '<span style="color: red">$1</span>')
}

注意事项

  1. 确保树数据结构正确,包含必要的 children 字段
  2. 搜索时注意大小写敏感性处理
  3. 对于异步加载的树,需要特殊处理未加载的节点

这种方法适用于大多数基于 Vue 的 Tree 组件实现,包括 Element UI、Ant Design Vue 等组件库中的 Tree 组件。根据具体需求可以调整过滤逻辑和展示效果。

tree模糊搜索实现vue

标签: 模糊tree
分享给朋友:

相关文章

vue 实现模糊搜索

vue 实现模糊搜索

Vue 实现模糊搜索的方法 使用计算属性实现模糊搜索 在 Vue 中,可以通过计算属性结合 JavaScript 的 filter 和 includes 方法实现简单的模糊搜索功能。假设有一个数据列表…

vue实现模糊查询

vue实现模糊查询

Vue 实现模糊查询的方法 在 Vue 中实现模糊查询可以通过多种方式完成,以下是几种常见的方法: 使用 JavaScript 的 filter 和 includes 方法 通过 Vue 的 co…

vue实现异步tree

vue实现异步tree

Vue 异步 Tree 实现方法 使用 el-tree 组件(Element UI) 安装 Element UI 后,可以通过 el-tree 组件实现异步加载: <template>…

vue模糊查询怎么实现

vue模糊查询怎么实现

Vue模糊查询实现方法 在Vue中实现模糊查询通常结合输入框和列表过滤功能,以下是几种常见方法: 使用计算属性过滤列表 <template> <div> <…

vue实现模糊查询搜索

vue实现模糊查询搜索

实现模糊查询的基本思路 在Vue中实现模糊查询通常需要结合输入框和列表渲染,通过监听输入框的变化实时过滤数据。核心是利用JavaScript的字符串方法或正则表达式匹配关键词。 使用计算属性实现…

vue实现前端模糊查询

vue实现前端模糊查询

实现前端模糊查询的方法 在Vue中实现前端模糊查询可以通过多种方式完成,以下介绍几种常见的方法: 使用JavaScript的filter和includes方法 定义一个搜索方法,利用数组的filt…