当前位置:首页 > VUE

vue表单实现搜索

2026-01-12 00:32:32VUE

实现 Vue 表单搜索功能

基础表单绑定 在 Vue 中通过 v-model 实现表单输入与数据的双向绑定,搜索框通常绑定一个字符串类型的数据。

<template>
  <input v-model="searchQuery" placeholder="输入搜索内容">
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  }
}
</script>

处理搜索事件 添加搜索按钮触发搜索方法,或使用 @keyup.enter 监听回车事件。

<template>
  <input 
    v-model="searchQuery" 
    @keyup.enter="handleSearch"
    placeholder="输入搜索内容"
  >
  <button @click="handleSearch">搜索</button>
</template>

<script>
export default {
  methods: {
    handleSearch() {
      console.log('搜索关键词:', this.searchQuery);
      // 调用API或过滤本地数据
    }
  }
}
</script>

本地数据过滤 当数据存储在本地时,可使用 computed 属性实时过滤结果。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: ['苹果', '香蕉', '橙子']
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.includes(this.searchQuery)
      );
    }
  }
}
</script>

防抖优化 高频输入时通过防抖减少请求次数,使用 Lodash 或自定义实现。

import { debounce } from 'lodash';

export default {
  methods: {
    handleSearch: debounce(function() {
      // 实际搜索逻辑
    }, 500)
  }
}

远程搜索实现 结合 axios 等库调用后端 API,注意处理加载状态和错误。

export default {
  methods: {
    async handleSearch() {
      try {
        const response = await axios.get('/api/search', {
          params: { q: this.searchQuery }
        });
        this.results = response.data;
      } catch (error) {
        console.error('搜索失败:', error);
      }
    }
  }
}

完整组件示例 整合表单、本地过滤和远程搜索的复合示例。

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @keyup.enter="handleSearch"
      placeholder="输入搜索内容"
    >
    <button @click="handleSearch">搜索</button>

    <div v-if="loading">加载中...</div>
    <ul v-else>
      <li v-for="item in results" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      searchQuery: '',
      results: [],
      loading: false
    }
  },
  methods: {
    async handleSearch() {
      this.loading = true;
      try {
        const response = await axios.get('/api/search', {
          params: { q: this.searchQuery }
        });
        this.results = response.data;
      } catch (error) {
        console.error(error);
      } finally {
        this.loading = false;
      }
    }
  }
}
</script>

注意事项

  • 敏感内容搜索需考虑安全性,后端应验证和处理输入
  • 移动端需优化输入体验,可增加清除按钮
  • 分页加载时需重置搜索条件
  • 空搜索结果需显示友好提示

通过组合这些方法,可以构建从简单到复杂的各种搜索场景实现。

vue表单实现搜索

标签: 表单vue
分享给朋友:

相关文章

vue实现条件判断

vue实现条件判断

Vue 条件判断实现方法 Vue 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式…

vue实现录播播放

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="bu…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-li…