当前位置:首页 > 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 监听回车事件。

vue表单实现搜索

<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 或自定义实现。

vue表单实现搜索

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
分享给朋友:

相关文章

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 可以轻松实现单选功能,将单选按钮的值绑定到同…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有…

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

vue模版实现

vue模版实现

Vue 模板实现方法 Vue 模板是 Vue.js 的核心特性之一,用于声明式地将 DOM 绑定至底层 Vue 实例的数据。以下是几种常见的 Vue 模板实现方式: 单文件组件(SFC) 使用 .…