当前位置:首页 > 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实现bootstrap

vue实现bootstrap

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

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue cli 实现

vue cli 实现

Vue CLI 实现步骤 安装 Vue CLI 确保 Node.js 版本在 8.9 或以上。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 创建新项目 使…

vue最佳实现

vue最佳实现

Vue 最佳实践 组件设计 组件应遵循单一职责原则,每个组件只负责一个功能模块。命名采用 PascalCase(如 UserProfile.vue),模板中使用 kebab-case(如 <us…

vue实现爬虫

vue实现爬虫

Vue 实现爬虫的基本思路 Vue.js 本身是一个前端框架,主要用于构建用户界面。要实现爬虫功能,通常需要结合后端技术或浏览器自动化工具。以下是几种常见的方法: 方法一:Vue + Node.js…

vue框架实现

vue框架实现

Vue 框架实现方法 Vue 是一个渐进式 JavaScript 框架,适用于构建用户界面。以下是一些核心实现方法,涵盖基本使用、组件化、状态管理和优化技巧。 基本项目搭建 使用 Vue CLI…