当前位置:首页 > VUE

名字筛选用vue实现

2026-01-23 06:34:55VUE

实现名字筛选的Vue组件

创建一个Vue组件实现名字筛选功能,可以通过输入框输入关键词实时筛选匹配的名字列表。

模板部分

<template>
  <div class="name-filter">
    <input 
      v-model="searchTerm" 
      placeholder="输入名字关键词" 
      class="filter-input"
    />
    <ul class="name-list">
      <li v-for="name in filteredNames" :key="name">
        {{ name }}
      </li>
    </ul>
  </div>
</template>

脚本部分

名字筛选用vue实现

<script>
export default {
  data() {
    return {
      searchTerm: '',
      names: [
        '张三',
        '李四',
        '王五',
        '赵六',
        '钱七',
        '孙八'
      ]
    }
  },
  computed: {
    filteredNames() {
      return this.names.filter(name => 
        name.toLowerCase().includes(this.searchTerm.toLowerCase())
      )
    }
  }
}
</script>

样式部分

<style scoped>
.name-filter {
  max-width: 300px;
  margin: 20px auto;
}

.filter-input {
  width: 100%;
  padding: 8px;
  margin-bottom: 10px;
}

.name-list {
  list-style: none;
  padding: 0;
}

.name-list li {
  padding: 8px;
  border-bottom: 1px solid #eee;
}
</style>

优化筛选功能

增加更复杂的筛选逻辑,如支持拼音首字母匹配:

名字筛选用vue实现

computed: {
  filteredNames() {
    const term = this.searchTerm.toLowerCase()
    return this.names.filter(name => {
      const lowerName = name.toLowerCase()
      return lowerName.includes(term) || 
        this.getPinyinInitials(name).includes(term)
    })
  }
},
methods: {
  getPinyinInitials(name) {
    // 简单实现拼音首字母匹配
    const pinyinMap = {
      '张': 'z', '三': 's',
      '李': 'l', '四': 's',
      '王': 'w', '五': 'w',
      '赵': 'z', '六': 'l',
      '钱': 'q', '七': 'q',
      '孙': 's', '八': 'b'
    }
    return name.split('').map(char => pinyinMap[char] || '').join('')
  }
}

使用第三方拼音库

为获得更准确的拼音匹配,可以引入pinyin-pro等专业库:

import pinyin from 'pinyin-pro'

methods: {
  getPinyinInitials(name) {
    return pinyin(name, { pattern: 'first', toneType: 'none' })
  }
}

添加防抖优化

为防止频繁触发筛选,可以添加防抖功能:

import { debounce } from 'lodash'

computed: {
  filteredNames: debounce(function() {
    const term = this.searchTerm.toLowerCase()
    return this.names.filter(name => 
      name.toLowerCase().includes(term)
    )
  }, 300)
}

支持异步数据加载

当名字列表需要从API获取时:

data() {
  return {
    searchTerm: '',
    names: [],
    isLoading: false
  }
},
async created() {
  this.isLoading = true
  this.names = await fetchNamesFromApi()
  this.isLoading = false
}

标签: 名字vue
分享给朋友:

相关文章

vue实现多个tab

vue实现多个tab

Vue 实现多个 Tab 的方法 使用动态组件切换 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现多个…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue实现bootstrap

vue实现bootstrap

Vue 中集成 Bootstrap 的方法 在 Vue 项目中集成 Bootstrap 可以通过以下方式实现,涵盖样式、组件和交互功能。 安装 Bootstrap 依赖 通过 npm 或 yarn…