当前位置:首页 > VUE

vue实现搜索城市

2026-01-19 08:00:10VUE

Vue 实现搜索城市功能

数据准备

在Vue组件中定义一个城市列表数组和一个搜索关键词变量。城市列表可以静态定义或通过API动态获取。

data() {
  return {
    cities: ['北京', '上海', '广州', '深圳', '杭州', '成都', '重庆', '武汉'],
    searchQuery: ''
  }
}

模板部分

创建一个输入框用于输入搜索关键词,并显示过滤后的城市列表。

vue实现搜索城市

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索城市">
    <ul>
      <li v-for="city in filteredCities" :key="city">
        {{ city }}
      </li>
    </ul>
  </div>
</template>

计算属性

使用计算属性实现城市搜索过滤逻辑,根据输入的关键词匹配城市名称。

computed: {
  filteredCities() {
    return this.cities.filter(city => {
      return city.toLowerCase().includes(this.searchQuery.toLowerCase())
    })
  }
}

使用API获取城市数据

如果需要从后端获取城市数据,可以在created或mounted钩子中调用API。

vue实现搜索城市

created() {
  fetch('https://api.example.com/cities')
    .then(response => response.json())
    .then(data => {
      this.cities = data
    })
}

添加防抖优化

对于频繁的输入操作,可以添加防抖函数优化性能。

methods: {
  debounceSearch: _.debounce(function() {
    this.filteredCities = this.cities.filter(city => {
      return city.toLowerCase().includes(this.searchQuery.toLowerCase())
    })
  }, 300)
}

样式美化

为搜索框和列表添加基本样式,提升用户体验。

input {
  padding: 8px;
  width: 200px;
  margin-bottom: 10px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  padding: 5px;
  cursor: pointer;
}
li:hover {
  background-color: #f0f0f0;
}

标签: 城市vue
分享给朋友:

相关文章

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker的…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click…