当前位置:首页 > 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方案 使用WebRTC技术结合Vue框架可以构建多人视频通话应用。以下是核心实现方法: 技术栈选择 Vue 2/3作为前端框架 WebRTC用于实时通信 Socket.io…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click…