当前位置:首页 > 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
    }
  })
}

列表组件集成

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

vue后台实现搜索

<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>

性能优化

添加防抖减少请求频率:

vue后台实现搜索

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())
  })
}

分页支持

结合分页实现搜索:

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

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

相关文章

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…