使用APICloud AVM框架封装通讯录组件

简介: 由于很多项目中都会用到通讯录,所有就封装了一个通讯录的组件,实现了可通过字母检索,拨打电话功能。

由于很多项目中都会用到通讯录,所有就封装了一个通讯录的组件,实现了可通过字母检索,拨打电话功能。


效果展示

1.gif


用的技术点是scroll-view中的scrollTo方法。

2.jpg


向组件中传值和监听子组件事件,具体使用可参考官方文档

3.png

数据格式

[{
  "zkey": "A",
  "children": [{
    "name": "安强",
    "phone": "11111111111",
    "zkey": "A"
  }]
}, {
  "zkey": "B",
  "children": [{
    "name": "边亮",
    "phone": "11111111111",
    "zkey": "B"
  }, {
    "name": "白菊",
    "phone": "11111111111",
    "zkey": "B"
  }, {
    "name": "贺之",
    "phone": "11111111111",
    "zkey": "B"
  }, {
    "name": "白梓",
    "phone": "11111111111",
    "zkey": "B"
  }, {
    "name": "卜军",
    "phone": "11111111111",
    "zkey": "B"
  }]
}]

image.gif

组件代码

<template>
    <view>
    <scroll-view class="page" scroll-y show-scrollbar="false" id="book">
      <safe-area></safe-area>
      <view class="item" v-for="(item, index) in list" v-show="item.children.length>0">
        <view class="nav" id={item.zkey}>
          <text class="nav-title">{item.zkey}</text>
        </view>
        <view class="box" v-for="(it, pindex) in item.children" data-phone={it.phone}  @click="takePhone">
          <image class="avator" src='../../image/avator.png' mode="widthFix"></image>
          <view class="right">
            <text class="name">{it.name}</text>
          </view>
        </view>
      </view>   
    </scroll-view>
    <scroll-view class="right-nav" scroll-y show-scrollbar="false">
      <view class="right-nav-item" data-id={item.zkey} @click="scrollToE" v-for="(item, index) in list">
        <text class={item.zkey==zIndex?'right-nav-item-on':'right-nav-item-off'}>{item.zkey}</text>
      </view>
    </scroll-view>
    </view>
</template>
<script>
  export default {
    name: 'tell',
    installed(){
    },
    props:{
            list: Array
        },
    data() {
      return{
        zIndex:''
      }
    },
    methods: {
      scrollToE(e){
        var id = e.target.dataset.id;
        var book = document.getElementById('book');
        book.scrollTo({
          view:id
        })
        this.data.zIndex = id;
      },
      takePhone(e){
        var phone = e.target.dataset.phone;
        this.fire('takeCall', phone);
      }
    }
  }
</script>
<style>
    .page {
        height: 100%;
    background-color: #ffffff;
    }
  .nav{
    margin: 0 10px;
    padding: 0 10px;
  }
  .nav-title{
    font-size: 20px;
  }
  .box{
    flex-flow: row nowrap;
    justify-content: flex-start;
    align-items: center;
    margin: 10px;
    border-bottom: 1px solid #ccc;
    padding-bottom: 10px;
  }
  .right{
    padding-left: 20px;
  }
  .bt{
    flex-flow: row nowrap;
    justify-content: flex-start;
    align-items: center;
  }
  .bt-position{
    font-size: 14px;
    color: #666666;
  }
  .bt-part{
    font-size: 14px;
    color: #666666;
    padding-left: 20px;
  }
  .right-nav{
    position: absolute;
    right: 10px;
    width: 30px;
    padding: 30px 0;
    height: 100%;
    align-items: center;
  }
  .right-nav-item{
    padding-bottom: 5px;
  }
  .right-nav-item-on{
    color: #035dff;
  }
  .right-nav-item-off{
    color: #666666;
  }
  .avator{
    width: 30px;
    padding: 5px;
  }
</style>

image.gif

其他页面的引用

<template>
    <view class="page">
    <safe-area></safe-area>
    <tell v-bind:list="bookdata" ontakeCall="takeCall"></tell>
    </view>
</template>
<script>
  import '../../components/tell.stml'
  export default {
    name: 'tellbook',
    apiready(){//like created
    },
    data() {
      return{
        bookdata:[{"zkey":"A","children":[{"name":"安强","phone":"11111111111","zkey":"A"}]},{"zkey":"B","children":[{"name":"边玉亮","phone":"11111111111","zkey":"B"},{"name":"白文菊","phone":"11111111111","zkey":"B"},{"name":"步贺之","phone":"11111111111","zkey":"B"},{"name":"白梓蓉","phone":"11111111111","zkey":"B"},{"name":"卜冰军","phone":"11111111111","zkey":"B"}]},{"zkey":"#","children":[{"name":"asd","phone":"11111111111","zkey":"#"},{"name":"3455","phone":"11111111111","zkey":"#"},{"name":"*3dd","phone":"11111111111","zkey":"#"},{"name":"tyuuu","phone":"11111111111","zkey":"#"}]}]
      }
    },
    methods: {
      takeCall(e){
        //console.log(JSON.stringify(e));
        var phone = e.detail;
        api.call({
          type: 'tel_prompt',
          number: phone
        });
      }
    }
  }
</script>
<style>
    .page {
        height: 100%;
    }
</style>

image.gif

现在,APICloud 官方正在举办 AVM 组件的征集大赛,通过审核就能获得一定的奖金,大家感兴趣的也可以去围观一下。传送门:https://www.apicloud.com/activity2205

目录
相关文章
|
前端开发
【React工作记录九十】ant design table实现上下行拖拽功能(类组件)
【React工作记录九十】ant design table实现上下行拖拽功能(类组件)
226 0
|
前端开发
#yyds干货盘点 【React工作记录二十一】ant design封装一个弹框组件
#yyds干货盘点 【React工作记录二十一】ant design封装一个弹框组件
187 0
#yyds干货盘点 【React工作记录二十一】ant design封装一个弹框组件
|
缓存 JSON 前端开发
APICloud AVM框架 开发视频会议APP
1.创建会议,确认会议时间、参会人员、会议主题、确定会议主持人(默认为发起人)可开启会议;同时会通过应用消息和短信通知参会人员。2.加入会议,可通过会议大厅找的会议列表直接加入,也可通过输入会议编号加入会议;加入会议的前提是会议已在进行中。3.快速会议,可直接确认会议人员然后发起实时视频会议,参会人员实时接收应用消息或短信,快速进入会议。3.历史会议,分为我主持的会议、我参与的会议。4.会议大厅,列表显示今天需要参加的会议。
APICloud AVM框架 开发视频会议APP
|
SQL 开发框架 数据可视化
使用APICloud AVM多端框架开发课程表功能
本教程主要面向初次使用APICloud Studio3 中可视化工具的新手开发者,旨在通过简单清晰的图文描述,让新手开发者快速掌握可视化工具的使用。
216 0
|
开发者
使用APICloud AVM框架实现App导航栏菜单
APICloud的AVM官方框架中有一个 frame-group的组件,在此组件的基础上,将栏目导航中view标签换成了 scroll-view标签,并设置成允许横向滚动。
209 0
|
JavaScript 前端开发
使用APICloud AVM框架封装app日历组件
AVM是APICloud推出的一个跨端的高性能 JavaScript框架,更趋近于原生的编程体验,它提供简洁的模型来分离应用的用户界面、业务逻辑和数据模型,适合高度定制化的项目。
208 0
使用APICloud AVM框架封装app日历组件
|
缓存 开发框架 前端开发
实例|APICloud AVM框架开发视频会议APP
APP开发采用的APICloud平台的AVM多端应用开发框架,使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App、小程序和 iOS 轻 App,且多端渲染效果统一; 全新的 App 引擎 3.0 不依赖 webView,提供百分百的原生渲染,保障 App 性能和体验与原生 App 一致;
249 0
|
存储 JSON 编解码
使用APICloud AVM框架开发人事档案管理助手app实战
由于人事档案具有涉密性,所以本应用没有使用后台服务,全部功能都在APP本地实现。开发工具采用 APICloud Studio3,基于VSCode的(PS:比基于Atom的autio2好用太多)。
538 0
使用APICloud AVM框架开发人事档案管理助手app实战
APICloud AVM框架封装验证码输入框组件
APICloud AVM框架封装验证码输入框组件实例。 验证码输入框组件,可自定义下次点击等待时长,自定义验证码长度,可根据自定义的验证码长度进行输入内容的验证。
120 0
|
前端开发 JavaScript 数据格式
使用APICloud AVM多端框架开发仿微信通讯录功能
本项目基于APICloud AVM框架编写,因此思路要转变下比如标签的用法、CSS样式表的写法、项目的目录结构、dom的操作等都不一样了,完全是Vue、React的编程思维。
233 0
使用APICloud AVM多端框架开发仿微信通讯录功能