当前位置:首页 > 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: [] // 筛选结果
  }
}

实现筛选方法

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

vue实现表单筛选功能

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 监听变化

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

vue实现表单筛选功能

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

完整示例

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

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

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

相关文章

css怎么制作表单

css怎么制作表单

基础表单结构 使用HTML创建表单元素,搭配CSS进行样式设计。表单通常包含<form>标签及输入控件(如<input>、<textarea>、<select…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

uniapp实现选项卡功能

uniapp实现选项卡功能

实现选项卡功能的基本方法 在uniapp中实现选项卡功能通常需要使用uni-segmented-control组件或自定义样式结合swiper组件。以下是两种常见实现方式: 使用uni-se…

h5实现点击复制功能

h5实现点击复制功能

使用document.execCommand方法(兼容旧浏览器) 通过document.execCommand('copy')实现复制功能,需先选中文本内容。创建一个隐藏的textarea或input…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的…

vue实现功能插件

vue实现功能插件

Vue 功能插件实现方法 插件基本结构 Vue 插件通常需要暴露一个 install 方法,该方法接收 Vue 构造函数作为参数。基本结构如下: const MyPlugin = { inst…