当前位置:首页 > VUE

vue搜索分页实现

2026-01-18 08:27:39VUE

Vue 搜索分页实现方法

基本思路

搜索分页通常需要结合后端API,前端通过Vue组件实现搜索框、分页器和数据列表的联动。核心逻辑包括:监听搜索输入变化、分页参数变化,触发数据请求并更新视图。

实现步骤

1. 组件结构设计 创建包含以下元素的Vue组件:

  • 搜索输入框(使用v-model绑定搜索关键词)
  • 分页器组件(可使用el-pagination或自定义)
  • 数据列表展示区域
<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索关键词"/>
    <ul>
      <li v-for="item in listData" :key="item.id">{{ item.name }}</li>
    </ul>
    <el-pagination
      @current-change="handlePageChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="total">
    </el-pagination>
  </div>
</template>

2. 数据状态管理 在Vue的data中定义必要变量:

data() {
  return {
    searchQuery: '', // 搜索词
    listData: [],    // 列表数据
    currentPage: 1,  // 当前页码
    pageSize: 10,    // 每页条数
    total: 0        // 总数据量
  }
}

3. 核心方法实现 创建获取数据的方法,建议使用防抖优化搜索触发:

methods: {
  fetchData() {
    const params = {
      keyword: this.searchQuery,
      page: this.currentPage,
      pageSize: this.pageSize
    }
    axios.get('/api/list', { params })
      .then(res => {
        this.listData = res.data.list
        this.total = res.data.total
      })
  },

  handlePageChange(page) {
    this.currentPage = page
    this.fetchData()
  }
}

4. 监听搜索词变化 使用watch监听搜索词变化并重置页码:

watch: {
  searchQuery(newVal) {
    this.currentPage = 1
    this.fetchData()
  }
}

5. 生命周期钩子mounted中初始化数据:

mounted() {
  this.fetchData()
}

优化建议

防抖处理 避免频繁触发搜索请求:

import { debounce } from 'lodash'

watch: {
  searchQuery: debounce(function(newVal) {
    this.currentPage = 1
    this.fetchData()
  }, 500)
}

分页器配置 根据需求调整分页器属性:

<el-pagination
  background
  layout="prev, pager, next"
  :page-size="pageSize"
  :total="total"
  @current-change="handlePageChange">
</el-pagination>

空状态处理 添加数据为空时的提示:

<div v-if="listData.length === 0" class="empty-tip">
  暂无数据
</div>

完整示例代码

<script>
export default {
  data() {
    return {
      searchQuery: '',
      listData: [],
      currentPage: 1,
      pageSize: 10,
      total: 0
    }
  },
  watch: {
    searchQuery(newVal) {
      this.currentPage = 1
      this.fetchData()
    }
  },
  methods: {
    fetchData() {
      axios.get('/api/list', {
        params: {
          keyword: this.searchQuery,
          page: this.currentPage,
          pageSize: this.pageSize
        }
      }).then(res => {
        this.listData = res.data.list
        this.total = res.data.total
      })
    },
    handlePageChange(page) {
      this.currentPage = page
      this.fetchData()
    }
  },
  mounted() {
    this.fetchData()
  }
}
</script>

通过以上实现,可以完成基本的搜索分页功能。根据实际项目需求,可以进一步优化UI交互或添加筛选条件等扩展功能。

vue搜索分页实现

标签: 分页vue
分享给朋友:

相关文章

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导…

vue实现表单

vue实现表单

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定。适用于 input、textarea、select 等元素。 <template> <…

vue递归实现

vue递归实现

vue递归实现方法 在Vue中实现递归组件通常用于树形结构、嵌套菜单等场景。以下是具体实现方式: 使用组件name属性递归 定义一个组件时,通过name属性让组件可以在自身模板中调用自己: &…

vue实现导出excel实现流程

vue实现导出excel实现流程

安装依赖库 需要安装 xlsx 和 file-saver 库来处理 Excel 文件的生成和保存。通过 npm 或 yarn 安装: npm install xlsx file-saver # 或…