当前位置:首页 > VUE

vue实现的表格搜索

2026-02-22 01:37:16VUE

vue实现的表格搜索

Vue 表格搜索实现方法

基础实现(基于本地数据过滤)

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <table>
      <tr v-for="item in filteredItems" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.email }}</td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '张三', email: 'zhang@example.com' },
        { id: 2, name: '李四', email: 'li@example.com' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        return item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
               item.email.toLowerCase().includes(this.searchQuery.toLowerCase())
      })
    }
  }
}
</script>

使用 Lodash 进行防抖优化

<script>
import { debounce } from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      allItems: [] // 原始数据
    }
  },
  created() {
    this.debouncedFilter = debounce(this.filterItems, 300)
  },
  watch: {
    searchQuery() {
      this.debouncedFilter()
    }
  },
  methods: {
    filterItems() {
      if (!this.searchQuery) {
        this.items = [...this.allItems]
        return
      }
      this.items = this.allItems.filter(item => 
        Object.values(item).some(val =>
          String(val).toLowerCase().includes(this.searchQuery.toLowerCase())
        )
      )
    }
  }
}
</script>

服务器端搜索实现

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      loading: false
    }
  },
  watch: {
    searchQuery(newVal) {
      this.fetchItems(newVal)
    }
  },
  methods: {
    async fetchItems(query) {
      this.loading = true
      try {
        const response = await axios.get('/api/items', {
          params: { q: query }
        })
        this.items = response.data
      } catch (error) {
        console.error(error)
      } finally {
        this.loading = false
      }
    }
  }
}
</script>

多条件高级搜索实现

<template>
  <div>
    <input v-model="searchParams.name" placeholder="姓名">
    <input v-model="searchParams.email" placeholder="邮箱">
    <select v-model="searchParams.status">
      <option value="">所有状态</option>
      <option value="active">活跃</option>
      <option value="inactive">非活跃</option>
    </select>

    <table>
      <tr v-for="item in filteredItems" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.email }}</td>
        <td>{{ item.status }}</td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchParams: {
        name: '',
        email: '',
        status: ''
      },
      items: []
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        return (
          (this.searchParams.name === '' || 
           item.name.toLowerCase().includes(this.searchParams.name.toLowerCase())) &&
          (this.searchParams.email === '' || 
           item.email.toLowerCase().includes(this.searchParams.email.toLowerCase())) &&
          (this.searchParams.status === '' || 
           item.status === this.searchParams.status)
        )
      })
    }
  }
}
</script>

使用第三方表格组件(如 Element UI)

<template>
  <el-input v-model="searchQuery" placeholder="搜索"></el-input>
  <el-table :data="filteredItems">
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="email" label="邮箱"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: []
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        !this.searchQuery ||
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
        item.email.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

实现要点

  • 使用 v-model 绑定搜索输入框
  • 通过计算属性 computed 实现实时过滤
  • 对于大数据集考虑使用防抖/节流优化性能
  • 服务器端搜索需要处理异步请求和加载状态
  • 多条件搜索需要构建更复杂的过滤逻辑
  • 第三方表格组件通常提供内置搜索功能

标签: 表格vue
分享给朋友:

相关文章

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

vue实现ppt

vue实现ppt

Vue 实现 PPT 的功能 Vue 可以结合第三方库或自定义组件实现类似 PPT 的演示效果。以下是几种常见的方法: 使用第三方库 reveal.js reveal.js 是一个流行的演示框架,支…

vue轮播实现

vue轮播实现

Vue 轮播实现方法 使用第三方库(推荐) 安装 swiper 或 vue-awesome-swiper 库,快速实现功能丰富的轮播效果。 以 vue-awesome-swiper 为例: npm…

vue实现注册

vue实现注册

Vue 实现注册功能 注册功能通常涉及前端表单、数据验证、与后端 API 的交互等步骤。以下是一个完整的 Vue 实现注册功能的方案。 创建注册表单 使用 Vue 的模板语法创建注册表单,包含用户名…