当前位置:首页 > VUE

vue实现条件搜索

2026-01-08 13:50:01VUE

实现条件搜索的基本思路

在Vue中实现条件搜索通常涉及以下几个关键步骤:绑定表单输入、处理搜索逻辑、动态过滤数据。以下是具体实现方法。

表单数据绑定

使用v-model双向绑定搜索条件表单元素,将用户输入的条件存储在组件的dataref中。例如搜索名称和分类:

<template>
  <input v-model="searchParams.name" placeholder="名称">
  <select v-model="searchParams.category">
    <option value="">全部</option>
    <option value="1">分类1</option>
  </select>
</template>

<script setup>
const searchParams = reactive({
  name: '',
  category: ''
})
</script>

计算属性过滤数据

通过计算属性实现实时过滤,根据条件返回匹配的数据列表。适用于前端本地数据过滤:

const filteredList = computed(() => {
  return originalList.filter(item => {
    const nameMatch = item.name.includes(searchParams.name)
    const categoryMatch = 
      !searchParams.category || 
      item.category === searchParams.category
    return nameMatch && categoryMatch
  })
})

方法触发搜索

对于需要后端接口处理的搜索,定义搜索方法并在适当时机(如点击按钮或防抖输入)触发:

const searchResults = ref([])

const handleSearch = async () => {
  const { data } = await axios.get('/api/search', {
    params: searchParams
  })
  searchResults.value = data
}

防抖优化性能

对输入框搜索添加防抖处理,避免频繁触发搜索:

import { debounce } from 'lodash-es'

const debouncedSearch = debounce(handleSearch, 500)

watch(() => searchParams.name, debouncedSearch)

多条件组合搜索

处理复杂条件时,可构建动态查询对象,过滤空值条件:

const buildQuery = () => {
  const query = {}
  if (searchParams.name) query.name = searchParams.name
  if (searchParams.category) query.category_id = searchParams.category
  return query
}

路由参数同步

将搜索条件同步到URL路由参数,支持页面刷新或分享时保持搜索状态:

const route = useRoute()
const router = useRouter()

watch(route, (newRoute) => {
  searchParams.name = newRoute.query.name || ''
})

watch(searchParams, (newVal) => {
  router.push({ query: { ...newVal } })
})

响应式重置搜索

提供重置功能,清空所有条件并触发初始状态:

const resetSearch = () => {
  Object.keys(searchParams).forEach(key => {
    searchParams[key] = ''
  })
  handleSearch()
}

通过以上方法组合,可以构建出灵活高效的条件搜索功能,适应不同业务场景需求。实际实现时可根据具体项目选择合适的技术方案。

vue实现条件搜索

标签: 条件vue
分享给朋友:

相关文章

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-s…

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组件中引…

vue 路由 实现

vue 路由 实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的详细步骤: 安装 Vue Router 通过 npm 或 y…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…