当前位置:首页 > VUE

vue怎么实现通讯录

2026-02-09 19:49:52VUE

Vue 实现通讯录的方法

数据准备与组件结构

通讯录通常需要展示联系人列表,并提供搜索、分组等功能。在Vue中,可以通过组件化和响应式数据管理实现。

// 示例数据格式
contacts: [
  { name: '张三', phone: '13800138000', group: '朋友' },
  { name: '李四', phone: '13900139000', group: '同事' }
]

列表渲染与分组

使用v-for渲染联系人列表,结合计算属性实现按首字母分组:

computed: {
  groupedContacts() {
    return this.contacts.reduce((groups, contact) => {
      const firstChar = contact.name.charAt(0).toUpperCase()
      if (!groups[firstChar]) groups[firstChar] = []
      groups[firstChar].push(contact)
      return groups
    }, {})
  }
}

模板部分实现分组展示:

vue怎么实现通讯录

<div v-for="(group, letter) in groupedContacts" :key="letter">
  <h3>{{ letter }}</h3>
  <div v-for="contact in group" :key="contact.phone">
    {{ contact.name }} - {{ contact.phone }}
  </div>
</div>

搜索功能实现

添加搜索框并过滤联系人:

data() {
  return {
    searchQuery: ''
  }
},
computed: {
  filteredContacts() {
    return this.contacts.filter(contact => 
      contact.name.includes(this.searchQuery) || 
      contact.phone.includes(this.searchQuery)
    )
  }
}

字母导航快速定位

右侧字母导航栏实现:

vue怎么实现通讯录

computed: {
  letters() {
    return Object.keys(this.groupedContacts).sort()
  }
},
methods: {
  scrollToLetter(letter) {
    // 滚动到对应字母分组位置
  }
}

完整组件示例

整合后的通讯录组件示例:

<template>
  <div class="address-book">
    <input v-model="searchQuery" placeholder="搜索联系人">

    <div class="letter-index">
      <span v-for="letter in letters" @click="scrollToLetter(letter)">
        {{ letter }}
      </span>
    </div>

    <div v-for="(group, letter) in filteredGroups" :key="letter" :id="`letter-${letter}`">
      <h3>{{ letter }}</h3>
      <div v-for="contact in group" :key="contact.phone" class="contact">
        {{ contact.name }} - {{ contact.phone }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      contacts: [...],
      searchQuery: ''
    }
  },
  computed: {
    filteredGroups() {
      // 组合搜索和分组逻辑
    },
    letters() {
      // 获取可用字母
    }
  }
}
</script>

进阶功能建议

  1. 使用Vuex管理全局联系人状态
  2. 添加联系人详情页和编辑功能
  3. 实现本地存储或对接后端API
  4. 添加字母分组吸顶效果
  5. 实现联系人添加/删除功能

性能优化

对于大型联系人列表,建议:

  • 使用虚拟滚动技术
  • 对搜索功能进行防抖处理
  • 考虑分页加载数据

标签: 通讯录vue
分享给朋友:

相关文章

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show 通过…