当前位置:首页 > 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);
      }
    }
  }
}

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

vue表单实现搜索

<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 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue实现gps

vue实现gps

Vue 中实现 GPS 定位功能 在 Vue 中实现 GPS 定位功能通常依赖于浏览器的 Geolocation API 或第三方地图服务(如高德、百度地图等)。以下是两种常见的实现方式: 使用浏览…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…

vue简单实现

vue简单实现

Vue 简单实现示例 以下是一个使用 Vue.js 创建简单应用的示例,涵盖基本功能如数据绑定、事件处理和组件化。 基础 HTML 结构 <!DOCTYPE html> <html…

vue实现投票

vue实现投票

Vue实现投票功能 数据准备 在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态: data() { return { options: [ { id: 1…