前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue实现手机通讯录

vue实现手机通讯录

作者头像
生南星
发布2020-04-02 11:30:45
2.9K0
发布2020-04-02 11:30:45
举报
文章被收录于专栏:生南星

欢迎关注生南星,让代码在青春里翻滚。

在学习vue实现手机通讯录的功能之前,我们首先要了解如何将汉字转为拼音并获取其首字母,以下为汉字转拼音插件:

1. 新建 const.js 文件,定义常量。

代码太长就不贴了,需要的请参考下面原文链接的文章:vue集成汉字转拼音插件

2. 新建 vue-py.js 文件,实现汉字转拼音功能:

代码语言:javascript
复制
import { pinyin } from './const.js'
export default {
  chineseToPinYin: function (l1) {
    var l2 = l1.length
    var I1 = ''
    var reg = new RegExp('[a-zA-Z0-9]')
    for (var i = 0; i < l2; i++) {
      var val = l1.substr(i, 1)
      var name = this.arraySearch(val, pinyin)
      if (reg.test(val)) {
        I1 += val
      } else if (name !== false) {
        I1 += name
      }
    }
    I1 = I1.replace(/ /g, '-')
    while (I1.indexOf('--') > 0) {
      I1 = I1.replace('--', '-')
    }
    return I1
  },
  arraySearch: function (l1, l2) {
    for (var name in pinyin) {
      if (pinyin[name].indexOf(l1) !== -1) {
        return this.ucfirst(name)
      }
    }
    return false
  },
  ucfirst: function (l1) {
    if (l1.length > 0) {
      var first = l1.substr(0, 1).toUpperCase()
      var spare = l1.substr(1, l1.length)
      return first + spare
    }
  }
}

3. 项目中集成插件:

代码语言:javascript
复制
<script>
//引入汉字转拼音插件文件
import vPinyin from '../../utils/vue-py'
let salesmanName = '哈哈'
//调用汉字转拼音方法
let namePinyin = vPinyin.chineseToPinYin(salesmanName)
//获取汉字拼音首字母
let namePinyin = vPinyin.chineseToPinYin(salesmanName.substring(0, 1));
firstPinyin = namePinyin.substring(0, 1).toUpperCase();
console.log(firstPinyin);
</script>

原文链接:https://blog.csdn.net/yin4302008/article/details/86698478

vue设置手机通讯录数据循环遍历数据格式。

1. 设置变量。

代码语言:javascript
复制
data(){
  return {
    //根据通讯录名字得到的首字母 
    contacts:[], 
    //处理过后的相应数据
    listData: [],
  }
},

2. 设置数据格式。

代码语言:javascript
复制
this.$post({
   data:{
      request:'',
      token: this.$store.getters.token,
   },
   success: res => {
     if(res.code === 0){
        this.listData = [];
        var resData = res.data.data;
        if (res.data.data.length !== 0) {
           var salesmanMap = new Map();
           // 构造通讯录数据格式
           resData.forEach((item, index) => {
               let salesmanName = item.manager_name;
               let firstPinyin = '';
               if (salesmanName !== '') {
                  //获取汉字拼音首字母
                  let namePinyin = vPinyin.chineseToPinYin(salesmanName.substring(0, 1));
                  firstPinyin = namePinyin.substring(0, 1).toUpperCase();
                }
                let salesmanData = [];
                //  构造key为业务员名字首字母 value为业务员工列表的map对象
                if (salesmanMap.has(firstPinyin)) {
                  salesmanData = salesmanMap.get(firstPinyin);
                  salesmanData.push(item);
                  salesmanMap.set(firstPinyin, salesmanData)
                } else {
                  salesmanData.push(item);
                  salesmanMap.set(firstPinyin, salesmanData)
                }
              });
              //  构造name:业务员名字首字母  value:业务员工列表数据 json对象数组
              for (let [key, value] of salesmanMap.entries()) {
                var jsonData = {};
                jsonData['name'] = key;
                jsonData['value'] = value;
                this.listData.push(jsonData);
                this.contacts.push(key)
              }
              console.log(this.listData);
              console.log(this.contacts);
          }
     }
   }
})

输出结果如下图所示:

3. 在组件中遍历(style自己写哦)。

代码语言:javascript
复制
<template v-for="(item,index) in listData">
   <van-index-anchor :index="item.name" style="background:#f4f4f4;" />
      <van-cell>
         <div class="contact-flex" v-for="(user,i) in item.value">
              <img class="avatar" src="../assets/acqImg.png" alt="">
            <div>
              <div class="name">{{user.manager_name}}</div>
              <div class="phone">{{user.phone}}</div>
            </div>
          </div>
     </van-cell>
</template>

页面展示效果如下图:

参考文章:https://blog.csdn.net/yin4302008/article/details/87910934

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生南星 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档