当前位置:首页 > VUE

vue实现表单筛选功能

2026-02-22 23:21:43VUE

Vue 表单筛选功能实现

数据绑定与表单结构

使用 v-model 实现表单元素与 Vue 数据的双向绑定。例如筛选条件包含关键词和分类:

<template>
  <form @submit.prevent="handleFilter">
    <input v-model="filterParams.keyword" placeholder="关键词">
    <select v-model="filterParams.category">
      <option value="">全部</option>
      <option v-for="cat in categories" :value="cat.id">{{ cat.name }}</option>
    </select>
    <button type="submit">筛选</button>
  </form>
</template>

定义数据与筛选逻辑

在 Vue 的 datasetup 中定义筛选参数和原始数据:

data() {
  return {
    filterParams: { keyword: '', category: '' },
    categories: [{id: 1, name: '科技'}, {id: 2, name: '生活'}],
    rawData: [], // 原始数据
    filteredData: [] // 筛选结果
  }
}

实现筛选方法

通过计算属性或方法实现动态筛选。计算属性适合简单筛选,方法适合复杂逻辑:

computed: {
  filteredData() {
    return this.rawData.filter(item => {
      const keywordMatch = item.title.includes(this.filterParams.keyword)
      const categoryMatch = 
        !this.filterParams.category || 
        item.category === this.filterParams.category
      return keywordMatch && categoryMatch
    })
  }
}

或使用方法触发筛选:

methods: {
  handleFilter() {
    this.filteredData = this.rawData.filter(item => {
      // 筛选逻辑同上
    })
  }
}

使用 watch 监听变化

当筛选参数变化时自动触发筛选,适合需要实时响应的场景:

watch: {
  filterParams: {
    handler(newVal) {
      this.handleFilter()
    },
    deep: true
  }
}

与后端交互

若需后端筛选,通过 axios 发送参数并获取结果:

methods: {
  async handleFilter() {
    const res = await axios.get('/api/data', { params: this.filterParams })
    this.filteredData = res.data
  }
}

优化体验

  • 添加防抖处理频繁输入
  • 显示加载状态
  • 空结果提示
import { debounce } from 'lodash'

methods: {
  handleFilter: debounce(function() {
    // 筛选逻辑
  }, 500)
}

完整示例

结合上述内容,一个完整组件可能如下:

vue实现表单筛选功能

<template>
  <div>
    <form @submit.prevent="handleFilter">
      <input v-model="filterParams.keyword" placeholder="关键词">
      <select v-model="filterParams.category">
        <option value="">全部</option>
        <option v-for="cat in categories" :value="cat.id">{{ cat.name }}</option>
      </select>
      <button type="submit">筛选</button>
    </form>

    <ul v-if="filteredData.length">
      <li v-for="item in filteredData" :key="item.id">{{ item.title }}</li>
    </ul>
    <p v-else>暂无数据</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      filterParams: { keyword: '', category: '' },
      categories: [],
      rawData: [],
      filteredData: []
    }
  },
  async created() {
    const [cats, data] = await Promise.all([
      axios.get('/api/categories'),
      axios.get('/api/data')
    ])
    this.categories = cats.data
    this.rawData = data.data
    this.filteredData = data.data
  },
  methods: {
    handleFilter() {
      this.filteredData = this.rawData.filter(item => {
        const keywordMatch = item.title.includes(this.filterParams.keyword)
        const categoryMatch = 
          !this.filterParams.category || 
          item.category === this.filterParams.category
        return keywordMatch && categoryMatch
      })
    }
  }
}
</script>

标签: 表单功能
分享给朋友:

相关文章

vue新增表单实现

vue新增表单实现

Vue 表单实现方法 使用 Vue 实现新增表单功能可以通过多种方式完成,以下是一些常见的方法和步骤: 使用 v-model 双向绑定 在 Vue 中,v-model 指令可以实现表单输入和应用状态…

css 制作表单

css 制作表单

使用 CSS 制作表单 表单是网页交互的重要组成部分,通过 CSS 可以美化表单元素,提升用户体验。以下是常见的表单样式设计方法。 基础表单结构 HTML 表单通常包含输入框、标签、按钮等元素。以下…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一个…

vue实现粘贴功能

vue实现粘贴功能

实现粘贴功能的基本方法 在Vue中实现粘贴功能通常涉及监听paste事件,并处理剪贴板数据。以下是一个基础实现示例: <template> <div @paste="handl…

vue拨号功能实现

vue拨号功能实现

Vue 拨号功能实现 基本思路 拨号功能通常包括数字键盘、号码显示区、拨号按钮等组件。通过Vue的数据绑定和事件处理机制,可以轻松实现交互逻辑。 实现步骤 1. 创建数字键盘组件 使用Vue的v-f…