当前位置:首页 > VUE

vue实现分页搜索功能

2026-02-22 16:48:24VUE

Vue 分页搜索功能实现

分页搜索功能通常需要结合后端API,前端实现主要包括数据请求、分页逻辑和搜索条件绑定。以下是基于Vue 3和Element Plus的完整实现方案。

基础模板结构

使用Element Plus的el-pagination组件和el-input组件构建界面:

<template>
  <div>
    <el-input v-model="searchQuery" placeholder="输入关键词搜索" @keyup.enter="handleSearch" />
    <el-table :data="tableData">
      <!-- 表格列定义 -->
    </el-table>
    <el-pagination
      v-model:current-page="currentPage"
      :page-size="pageSize"
      :total="total"
      @current-change="handlePageChange"
    />
  </div>
</template>

核心状态管理

在script部分定义响应式数据和初始化方法:

import { ref, onMounted } from 'vue'
import axios from 'axios'

const tableData = ref([])
const searchQuery = ref('')
const currentPage = ref(1)
const pageSize = ref(10)
const total = ref(0)

const fetchData = async () => {
  try {
    const res = await axios.get('/api/data', {
      params: {
        page: currentPage.value,
        size: pageSize.value,
        query: searchQuery.value
      }
    })
    tableData.value = res.data.list
    total.value = res.data.total
  } catch (error) {
    console.error('获取数据失败:', error)
  }
}

事件处理函数

实现分页切换和搜索触发逻辑:

vue实现分页搜索功能

const handlePageChange = (newPage) => {
  currentPage.value = newPage
  fetchData()
}

const handleSearch = () => {
  currentPage.value = 1  // 搜索时重置到第一页
  fetchData()
}

onMounted(() => {
  fetchData()
})

优化搜索体验

添加防抖处理避免频繁请求:

import { debounce } from 'lodash-es'

const debouncedSearch = debounce(handleSearch, 500)

// 修改input绑定
<el-input 
  v-model="searchQuery" 
  @input="debouncedSearch" 
  placeholder="输入关键词搜索" 
/>

完整组件示例

组合所有功能后的完整组件:

vue实现分页搜索功能

<template>
  <div class="pagination-demo">
    <el-input
      v-model="searchQuery"
      placeholder="输入关键词搜索"
      clearable
      @clear="handleSearch"
      @keyup.enter="handleSearch"
    />

    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="id" label="ID" width="180" />
      <el-table-column prop="name" label="名称" width="180" />
      <el-table-column prop="value" label="值" />
    </el-table>

    <el-pagination
      v-model:current-page="currentPage"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total"
      @size-change="handleSizeChange"
      @current-change="handlePageChange"
    />
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { debounce } from 'lodash-es'
import axios from 'axios'

const tableData = ref([])
const searchQuery = ref('')
const currentPage = ref(1)
const pageSize = ref(10)
const total = ref(0)

const fetchData = async () => {
  try {
    const res = await axios.get('/api/data', {
      params: {
        page: currentPage.value,
        size: pageSize.value,
        query: searchQuery.value.trim()
      }
    })
    tableData.value = res.data.list
    total.value = res.data.total
  } catch (error) {
    console.error('获取数据失败:', error)
  }
}

const handlePageChange = (newPage) => {
  currentPage.value = newPage
  fetchData()
}

const handleSizeChange = (newSize) => {
  pageSize.value = newSize
  currentPage.value = 1
  fetchData()
}

const handleSearch = () => {
  currentPage.value = 1
  fetchData()
}

const debouncedSearch = debounce(handleSearch, 500)

onMounted(() => {
  fetchData()
})
</script>

关键实现要点

  1. 分页参数管理:currentPage和pageSize需要作为请求参数发送到后端
  2. 搜索条件重置:执行搜索时需要将页码重置为1
  3. 防抖处理:对输入框的实时搜索进行性能优化
  4. 数据绑定:表格数据与分页器需要保持同步更新

后端API建议

后端接口应支持以下参数:

  • page: 当前页码
  • size: 每页条数
  • query: 搜索关键词

返回格式建议:

{
  "list": [...],
  "total": 100
}

样式优化建议

添加加载状态提升用户体验:

const loading = ref(false)

const fetchData = async () => {
  loading.value = true
  try {
    // ...原有逻辑
  } finally {
    loading.value = false
  }
}

// 在el-table添加loading属性
<el-table :data="tableData" v-loading="loading">

分享给朋友:

相关文章

vue router实现分页

vue router实现分页

Vue Router 实现分页的方法 在 Vue.js 中,可以通过 Vue Router 实现分页功能,通常需要结合路由参数和动态路由匹配。以下是几种常见的实现方式: 使用查询参数实现分页 在路…

js实现分页功能代码

js实现分页功能代码

分页功能实现方法 客户端分页(前端处理数据) 适用于数据量较小且已全部加载到前端的情况。 // 示例数据 const data = Array.from({length: 100}, (_, i)…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ?…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

vue实现后台分页

vue实现后台分页

Vue 实现后台分页的方法 分页组件与数据绑定 在 Vue 中实现后台分页通常需要结合分页组件和后端 API。使用 el-pagination(Element UI)或自定义分页组件,通过 v-mod…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…