当前位置:首页 > 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.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、当当、天猫等…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signatu…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…

vue实现tab

vue实现tab

Vue 实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 和 v-show 指令 通过绑定 v-if 或 v-show 来…

vue实现饼图

vue实现饼图

使用 ECharts 实现 Vue 饼图 安装 ECharts 依赖 npm install echarts --save 在 Vue 组件中引入 ECharts import * as echa…