uni-app做A-Z排序通讯录、索引列表

这篇具有很好参考价值的文章主要介绍了uni-app做A-Z排序通讯录、索引列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uni-app做A-Z排序通讯录、索引列表,uni-app,javascript,前端

上图是效果图,三个问题

  • 访问电话通讯录,拿数据
  • 拿到用户的联系人数组对象,之后根据A-Z排序
  • 根据字母索引快速搜索

首先说数据怎么拿 - 社区有指导
https://ask.dcloud.net.cn/question/64117 uniapp 调取通讯录

// #ifdef APP-PLUS
    plus.contacts.getAddressBook( plus.contacts.ADDRESSBOOK_PHONE, function( addressbook ) {
       // 查找联系人  
        addressbook.find(["displayName","phoneNumbers"],function(contacts){  
          console.log('获取联系人成功')  
           console.log(JSON.stringify(contacts)) ; //拿到的数据
          }, function () {  
               uni.showToast({  
            title: '获取联系人失败',  
            duration: 2000  
        })  
           },{multiple:true}); 
    }, function ( e ) {
        alert( "Get address book failed: " + e.message );
    })
// #endif 

这样就实现了第一步,接下来分析拿到的数据,做处理。

{ 
       "id": 6,
        "rawId": null,
        "target": 0,
        "displayName": "Ann",
        "name": null,
        "nickname": null,
        "phoneNumbers": [{
                "id": 0,
                "pref": false,
                "type": "home",
                "value": "895694582"
            }],
        "emails": null,
        "addresses": null,
        "ims": null,
        "organizations": null,
        "birthday": null,
        "note": null,
        "photos": null,
        "categories": null,
        "urls": null }

从这部分数据看,有用到的是

{displayName:"Ann", "phoneNumbers":[ ... ]}

我们将换成另一种数据结果

 pySort:function(arrList){
    var $this = this;
    if(!String.prototype.localeCompare)
        return null;
    var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ#".split('');//ABCDEFGHJKLMNOPQRSTWXYZ
    var zh = "阿八嚓哒妸发旮哈*讥咔垃痳拏噢妑七呥涩它**穵夕丫帀".split('');
    var result = [];
    var curr;

    for(let i=0;i<letters.length;i++){
        curr = {letter: letters[i], data:[]}; //字母对象,data数据
        arrList.forEach((n)=>{
            let initial = n.displayName.charAt(0);//截取第一个字符
            if(initial==letters[i]||initial==letters[i].toLowerCase()){//首字符是英文的
                curr.data.push(n);
            }else if(zh[i]!=='*'&&$this.isChinese(initial)){//判断是否是无汉字,是否是中文
                let chinaName = pinyin.getFullChars(initial).charAt(0); //直接使用pinyin中方法
                if(chinaName==letters[i]||chinaName==letters[i].toLowerCase()){//首字符是英文的
                    curr.data.push(n);
                }
            }
            if(letters[i]=='#'&&!$this.isChar(initial)&&!$this.isChinese(initial)){
                curr.data.push(n);
            }
        })
        result.push(curr)
    }
    this.contactList = result; //contactList 是data中定义的 []
},
isChinese:function(temp){
    var re=/[^\u4E00-\u9FA5]/;
    if (re.test(temp)){return false;}
    return true ;
},
isChar:function(char){
    var reg = /[A-Za-z]/;
    if (!reg.test(char)){return false ;}
    return true ;
},

截取姓名的首字符,英文可以直接比对;数字字符也可以直接比对;中文需要将转成拼音再取首字母

汉字转拼音js下载路径:(如果无效,自行处理)
链接:https://pan.baidu.com/s/1NZ4noIgHv2HSzZW6yBRTxA 密码:2kv1

注意的是,下载的这份js不能直接在vue项目中使用,需要在js文件中加

export{
    pinyin
}
//页面引入
import {pinyin} from '../../common/Convert_Pinyin.js';

这样排序做完。接下来就是索引部分。
其实可以直接使用插件市场的插件,地址附上(https://ext.dcloud.net.cn/plugin?id=375#detail)
但是可以更简单

<scroll-view class="scroll-list" :scroll-into-view="scrollViewId" scroll-y="true" scroll-with-animation  :style="{height:winHeight + 'px'}">
    <view v-for="(item,index) in contactList" :key="index" :id="item.letter == '#' ? 'indexed-list-YZ' :'indexed-list-' + item.letter">
        <view class="letter-title" v-if="item.data&&item.data.length" id="item.letter">{{item.letter}}</view>
        <view> .......</view>
    </view>
</scroll-view>
<view class="right-menu">
    <view v-for="(i,index) in Letters" :key="index" @click="jumper(i,index)" :class="jumperIndex == i?'letter-item active':'letter-item'">{{i}}</view>
</view>

这里的scroll-view是关键,scroll-view


scroll-into-view 与 子元素的id结合使用。

data() {
    return {
        jumperIndex:'A',
        contactList:[],
        scrollViewId:'',
        winHeight: 0,
        itemHeight: 0,
        Letters:['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','#'],
    }
},
methods:{
       jumper(event,i){
        this.jumperIndex = event;
        let len = this.contactList[i].data.length;
        if(event == '#'){
            this.scrollViewId = 'indexed-list-YZ';
            return
        }
        if(len>0){
            console.log(111);
            this.scrollViewId = 'indexed-list-' + event;
        }
    },
},
onLoad(){       
    let winHeight = uni.getSystemInfoSync().windowHeight;
    this.itemHeight = winHeight / 26;
    this.winHeight = winHeight;
},

主要代码,主要功能完结。

 文章来源地址https://www.toymoban.com/news/detail-813705.html

到了这里,关于uni-app做A-Z排序通讯录、索引列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化

    动态内存管理的函数有:malloc,calloc,ralloc,free,本文讲解动态内存函数和使用,如何进行动态内存管理,实现通讯录联系人容量的动态化,对常见动态内存错误进行总结。                           ✨  猪巴戒 :个人主页✨                 所属专栏 :《C语言进阶》

    2024年02月04日
    浏览(67)
  • Java实现通讯录

    前言:通讯录非常适合前期需要练习语法的小伙伴,效果非常好。 水再浑浊,只要长久沉淀,依然会分外清澈。 人再愚钝,只要足够努力,一样能改写命运。 此通讯录的功能包括: 1.删除联系人 2.增加联系人 3.展示已有联系人 4.查找联系人 5.排序联系人 6.退出通讯录 联系人

    2024年02月11日
    浏览(54)
  • python-手机通讯录

    手机通讯录 通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式等信息,也可以在其中新增联系人,或修改、删除联系人信息。 本实例要求编写程序,实现具备添加、查看、修改以及删

    2024年02月06日
    浏览(64)
  • 通讯录管理系统

    作者:狮子也疯狂 专栏:《项目集锦》 坚持做好每一步,幸运之神自然会驾凌在你的身上 该项目是用于日常生活中记录联系人信息的一款智能小工具。实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删除、排序等功能。该项目是以 Windows 控制台

    2024年02月05日
    浏览(50)
  • C语言—通讯录

    通讯录中是存放人的信息的,人的信息包括:姓名、年龄、性别、电话、住址。可以把人的信息定义成结构体,因为每个联系人的信息都有这几个要素。 注:用#define定义的标识符常量,使用修改时可以降低维护成本。如联系人的信息中名字的宽度为20,以便之后需要修改时只

    2024年02月05日
    浏览(69)
  • C语言——通讯录

    相信大家都有过通讯录,今天我来带大家实现以下最简单的通讯录,通过本篇文章,相信可以让大家对C语言有进一步的认识。 话不多说,我们先放函数的实现  是不是看到这里会感到很害怕??不用怕,跟着我的思路,你也可以实现它,我带着你一步一步实现每一个功能  

    2024年02月13日
    浏览(47)
  • C++ 通讯录案例

    代码如下:

    2024年02月13日
    浏览(68)
  • 手机通讯录 python

    person_info = [] print(“=” * 20) print(‘欢迎使用通讯录:’) print(“1.添加联系人”) print(“2.查看通讯录”) print(“3.删除联系人”) print(“4.修改联系人信息”) print(“5.查找联系人”) print(“6.退出”) print(“=” * 20) while True: per_dict = {} fun_num = input(‘请输入功能序号:’) if fun_num

    2024年02月06日
    浏览(37)
  • 【C语言】通讯录

    目录 一、关于通讯录 二、代码逻辑 三、通讯录实现 1.菜单设计 2.逻辑主要功能设计 3.增加联系人功能实现 4.显示全部联系人信息   5.删除联系人 6.查找联系人 7.修改联系人信息 8.对联系人进行排序  9.一键清空所有联系人 四、完整源码 test.c contact.c contact.h 在通讯录中,我

    2024年02月08日
    浏览(59)
  • 【通讯录】--C语言

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 用c语言实现一个通讯

    2024年02月15日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包