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

小程序:通讯录的实现

作者头像
不爱吃糖的程序媛
发布2024-01-18 20:37:54
1740
发布2024-01-18 20:37:54
举报
文章被收录于专栏:夏天的前端笔记
1.address-book.vue
代码语言:javascript
复制
<template>
  <!-- 通讯录 -->
  <view class="address-book">
    <view class="address-book-header">
      <x-nav-bar input title="通讯录" @onInputChange="onChange"></x-nav-bar>
    </view>
    <view class="address-book-main">
      <template v-if="resultList.length != 0">
        <view class="main-list">
          <x-phone
            type="3"
            :phoneList="resultList"
            :isCheckbox="false"
            :searchValue="searchValue"
          ></x-phone>
        </view>
      </template>
      <template v-else>
        <x-no-data v-if="!isLoad"></x-no-data>
      </template>
      <template>
        <view class="main-load" v-if="isLoad">
          <u-loading mode="circle"></u-loading>
        </view>
      </template>
    </view>
    <view class="address-book-tab">
      <x-nav-tab></x-nav-tab>
    </view>
  </view>
</template>
2.address-book.js
代码语言:javascript
复制
<script>
import serve from "../../../mixin/common.js";
export default {
  name: "address-book",
  data() {
    return {
      // 加载数据的动画
      isLoad: false,
      // 保存选择的人员--用于协助申请
      selectedList: [],
      // 储存处理后的数据
      resultList: [],
      searchValue: "",
    };
  },
  onShow() {
    this.searchValue = '';
  },
  onLoad() {
    this.isLoad = true;
    this.getContactsList();
  },
  mounted() {},
  
  methods: {
    //获取通讯录列表
    getContactsList() {
      serve.setContactsList().then((res) => {
        this.handleData(res.data);
      });
    },
    handleData(data) {
      let temporary = [];

      // 对从后台获取的数据进行处理
      for (let i = 0, length = data.length; i < length; i++) {
        temporary = data[i].employe;
        this.resultList.push({
          deptName: data[i].deptName,
          list: [],
        });
        for (let j = 0, num = temporary.length; j < num; j++) {
          this.resultList[i].list.push({
            userName: temporary[j].userName,
            userId: temporary[j].userId,
            phone: temporary[j].phone,
          });
        }
      }
      this.isLoad = false;
    },
    // 改变数据
    onChange(value) {
      this.isLoad = true;
      this.searchValue = value;
    },
  },
  onShareAppMessage(res) {},
};
</script>
3.address-book.scss
代码语言:javascript
复制
<style lang="scss" scoped>
.address-book {
  width: 100vw;
  height: 100vh;
  display: flex;
  flex-direction: column;

  &-header {
    width: 100vw;
  }

  &-main {
    flex: 1;
    overflow: scroll;

    .main-load {
      padding: 30rpx 0;
      text-align: center;
    }
  }
}
</style>
4.自我总结

1.这个页面的构成是头部(搜索)、中间列表部分(通讯录列表展示)、顶部(tab栏)三部分组成 在写x-phone组件的时候,我把头部也算进去了,但是这种做法是错误的,写组件的时候就写一个单独的组件就好了,不要把其他的组件一起绑在一起,切记这个错误。 2.页面的组装类命名,例如头部的命名规范class="address-book-header"以及其他的,都有按照这个规范来的,这样子写让人易懂明了,以后要多多注意。 3.页面的滚动样式设置,是中间那坨滚动。我记得在第一次做的时候,整个页面都会拉动,因为我把头部组件和中间的写在一坨上了,正确的就是以上的写法。 4.在中间列表部分显示部分,我没有考虑有数据显示和无数据的情况,按照上面的写法是外面一个大view,中间是几种情况的template,这在以后的小程序都是很有必要的,也是必须要考虑进去的,这是自己一个不完善的点。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.address-book.vue
  • 2.address-book.js
  • 3.address-book.scss
  • 4.自我总结
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档