当前位置:首页 > VUE

vue后台实现搜索

2026-02-10 20:03:05VUE

Vue 后台实现搜索功能

基础搜索实现

在 Vue 后台系统中实现搜索功能通常需要结合前端和后端协作。前端负责收集用户输入并发送请求,后端处理查询并返回结果。

创建搜索输入框组件:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." @input="handleSearch"/>
    <button @click="handleSearch">搜索</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    handleSearch() {
      this.$emit('search', this.searchQuery)
    }
  }
}
</script>

API 请求封装

使用 axios 或其他 HTTP 客户端封装搜索请求:

import axios from 'axios'

export function searchItems(query) {
  return axios.get('/api/items', {
    params: {
      q: query
    }
  })
}

列表组件集成

在列表页面集成搜索功能:

<template>
  <div>
    <SearchBar @search="onSearch"/>
    <table>
      <tr v-for="item in items" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
  </div>
</template>

<script>
import SearchBar from './SearchBar'
import { searchItems } from '@/api'

export default {
  components: { SearchBar },
  data() {
    return {
      items: [],
      searchQuery: ''
    }
  },
  methods: {
    onSearch(query) {
      this.searchQuery = query
      this.fetchItems()
    },
    fetchItems() {
      searchItems(this.searchQuery).then(res => {
        this.items = res.data
      })
    }
  },
  created() {
    this.fetchItems()
  }
}
</script>

高级搜索功能

实现更复杂的搜索功能可以添加筛选条件:

<template>
  <div>
    <input v-model="filters.name" placeholder="名称"/>
    <select v-model="filters.category">
      <option value="">所有分类</option>
      <option v-for="cat in categories" :value="cat.id">{{ cat.name }}</option>
    </select>
    <button @click="search">搜索</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      filters: {
        name: '',
        category: ''
      },
      categories: []
    }
  },
  methods: {
    search() {
      this.$emit('search', this.filters)
    }
  }
}
</script>

性能优化

添加防抖减少请求频率:

import _ from 'lodash'

export default {
  methods: {
    handleSearch: _.debounce(function() {
      this.$emit('search', this.searchQuery)
    }, 500)
  }
}

后端接口示例

Node.js Express 后端处理搜索请求:

router.get('/api/items', (req, res) => {
  const { q } = req.query
  let query = {}

  if(q) {
    query.$or = [
      { name: new RegExp(q, 'i') },
      { description: new RegExp(q, 'i') }
    ]
  }

  Item.find(query)
    .then(items => res.json(items))
    .catch(err => res.status(500).json(err))
})

本地搜索实现

对于小型数据集,可以完全在前端实现搜索:

filterItems() {
  return this.allItems.filter(item => {
    return item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
  })
}

分页支持

结合分页实现搜索:

vue后台实现搜索

searchItems(query, page = 1) {
  return axios.get('/api/items', {
    params: {
      q: query,
      page,
      limit: 10
    }
  })
}

标签: 后台vue
分享给朋友:

相关文章

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现slot

vue实现slot

Vue 中的 Slot 实现方法 Vue 的 slot 是一种内容分发机制,允许父组件向子组件插入内容。以下是几种常见的 Slot 实现方式: 默认 Slot 子组件通过 <slot>…

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目 Vue UI 是 Vue CLI 提供的图形化界面工具,可以通过可视化操作创建和管理 Vue 项目。 安装 Vue CLI 确保已安装 Node.js(建议版…

vue实现树目录

vue实现树目录

Vue 实现树形目录 在 Vue 中实现树形目录可以通过递归组件或第三方库(如 element-ui 的 el-tree)完成。以下是两种常见实现方式: 递归组件实现 递归组件适合自定义程度高的树形…