当前位置:首页 > VUE

用vue实现搜索查询

2026-02-25 20:28:05VUE

使用 Vue 实现搜索查询

创建 Vue 项目并设置基础结构

确保已安装 Vue CLI,通过以下命令创建项目:

vue create search-demo

进入项目目录后,安装必要的依赖(如 Axios 用于 API 调用):

npm install axios

实现搜索组件

src/components 下创建 SearchComponent.vue,包含输入框和搜索结果展示区域:

用vue实现搜索查询

<template>
  <div>
    <input 
      type="text" 
      v-model="searchQuery" 
      @input="handleSearch" 
      placeholder="输入关键词..."
    />
    <ul v-if="results.length">
      <li v-for="result in results" :key="result.id">
        {{ result.name }}
      </li>
    </ul>
    <p v-else>暂无结果</p>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      searchQuery: '',
      results: [],
      debounceTimer: null
    };
  },
  methods: {
    handleSearch() {
      clearTimeout(this.debounceTimer);
      this.debounceTimer = setTimeout(() => {
        if (this.searchQuery.trim()) {
          this.fetchResults();
        } else {
          this.results = [];
        }
      }, 300);
    },
    async fetchResults() {
      try {
        const response = await axios.get('https://api.example.com/search', {
          params: { q: this.searchQuery }
        });
        this.results = response.data;
      } catch (error) {
        console.error('搜索失败:', error);
      }
    }
  }
};
</script>

添加防抖优化

通过 setTimeoutclearTimeout 实现输入防抖,避免频繁触发 API 请求:

// 已在上述代码的 handleSearch 方法中实现

集成到主应用

App.vue 中引入并使用搜索组件:

用vue实现搜索查询

<template>
  <div id="app">
    <SearchComponent />
  </div>
</template>

<script>
import SearchComponent from './components/SearchComponent.vue';

export default {
  components: { SearchComponent }
};
</script>

样式优化

根据需要添加基础样式,例如调整输入框和结果列表的显示:

input {
  padding: 8px;
  width: 300px;
  margin-bottom: 20px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  padding: 8px;
  border-bottom: 1px solid #eee;
}

后端 API 对接

若需对接真实后端,替换示例中的 https://api.example.com/search 为实际接口地址,并确保支持查询参数(如 q=关键词)。测试时可先用 Mock 数据:

// 在 fetchResults 方法中临时模拟数据
this.results = [
  { id: 1, name: '结果1' },
  { id: 2, name: '结果2' }
];

注意事项

  • 根据实际需求调整防抖时间(示例为 300ms)。
  • 处理 API 错误时,可增加用户提示(如 Toast 或错误状态显示)。
  • 若结果量大,考虑分页或虚拟滚动优化性能。

标签: vue
分享给朋友:

相关文章

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue 实现权限

vue 实现权限

Vue 实现权限控制的方法 在 Vue 项目中实现权限控制通常涉及前端路由、组件和按钮级别的权限管理。以下是几种常见的实现方式: 路由权限控制 通过路由守卫实现权限验证,过滤用户无权访问的路由:…

vue实现闪烁

vue实现闪烁

Vue实现元素闪烁效果 使用CSS动画实现 通过Vue绑定class结合CSS动画实现闪烁效果,代码简洁且性能较好。 <template> <div :class="{…

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

vue 实现工具

vue 实现工具

Vue 实现工具的方法 使用 Vue 实现工具功能可以通过多种方式完成,具体取决于工具的类型和需求。以下是几种常见的方法: 组件化实现 创建一个独立的 Vue 组件来封装工具功能。例如,实现一个计…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…