微信聊天小程序——(三、获取好友列表)

article/2025/8/25 23:46:32

三、获取好友列表

步骤一、展示所有好友的推荐列表(friends页面)

具体效果:
在这里插入图片描述

实现思路:

  • 我们有我们的用户数据库表即:uers
  • 循环我们的数据库用户表,达到所有的用户信息,即:userList
  • 利用云函数拿到我们的userList,赋值给data,之后再页面中显示出来
  • 显示的时候,注意用 onLoad调用,因为每次页面打开都需要加载

注意:因为好友列表在每一次打开页面的时候都要加载,所以,我们写在页面函数中。

在js文件中:

// pages/friends/friends.js
Page({/*** 页面的初始数据*/data: {},//在每次页面加载的时候进行调用onLoad(options) {this.getAllUser();},// 功能:获取所有的用户信息getAllUser(){var that=this;wx.cloud.database().collection("chat_users1").get({success(res){console.log(res)that.setData({userList:res.data})}})}})

在wxml文件中

<button>附近好友</button>
<view >
<button class="myfriends">我的好友</button>
</view>//写一个block,经常用来接收一堆相同的数据
<block class="list_fox" wx:for="{{userList}}">//里面的图片和文本用view标签包裹,为了view在一行显示
<view class="list_item">
<image class="ima" src="{{item.faceImg}}"></image>
<view class="name">{{item.nickName}}</view>
</view></block>

在wxss样式文件中

.myfriends{margin-left: 10rpx;}
.ima{width: 120rpx ;height: 120rpx;border-radius: 50%;
}
.list_item{margin: 10rpx 10rpx;padding: 10rpx;display: flex;flex-direction: row;align-items: center;
}
.name{margin: 10rpx 10rpx 10rpx 30rpx;
}

具体效果演示:

在这里插入图片描述

步骤二、修饰好友页面

效果:

在这里插入图片描述

思路:

  • 主要是样式部分

  • 页面的数据已经在上一个步骤中已经获取,即,userList

  • 这个页面进行调用就行

  • 调用的时候,使用block组件,循环我们获取到的用户表

在wxml文件中:

<view>推荐好友:</view><block class="list_fox" wx:for="{{userList}}"><view class="list_item"><view class="left"><image class="ima" src="{{item.faceImg}}"></image><view class="name">{{item.nickName}}</view></view><view class="right">添加好友</view></view></block><view>我的好友:</view>

在js文件中:

// pages/friends/friends.js
Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getAllUser();},// 功能:获取所有的用户信息getAllUser(){var that=this;wx.cloud.database().collection("chat_users1").get({success(res){console.log(res)that.setData({userList:res.data})}})}})

在wxss文件中:

注意这个时候,我们设计样式的思路:

一行有两个盒子,左边一个,右边一个。

其中,左边的盒子里有两个小盒子。

在这里插入图片描述

.myfriends{margin-left: 10rpx;}
.ima{width: 120rpx ;height: 120rpx;border-radius: 50%;
}
.list_item{margin: 10rpx 10rpx;padding: 10rpx;display: flex;flex-direction: row;}
.name{margin: 10rpx 10rpx 10rpx 30rpx;
}
.left{display: flex;flex-direction: row;}
.right{margin: 10rpx 0rpx 0rpx 350rpx;
}

步骤三、添加好友

具体效果:

在这里插入图片描述
在这里插入图片描述

思路:

  • 本质上是建立一个新的聊天记录表,在这个表格中进行操作.
    这个表格有的参数
    聊天记录
    是否为好友
    双方信息
    当然有_id_
  • 当一方发出请求时,建立一个聊天记录表
    聊天记录 空数组
    是否为好友0
    双方信息 userA和userB
  • 当登录另外一个账号的时候,从对方的“我的好友”页面,能收到消息
  • _在我的新朋友页面本质上就是:查询是否有人发出好友验证信息,即,userB的_id是否等于此账号的_id,并且isfriend是否为0
  • 将获取到的相应的聊天表赋值给本页的data,同时在页面中显示。
  • 如果点击“同意添加好友”,就意味着向我们的聊天记录表中,查询自己是被邀请方,升级我们的好友状态isfriend为1。

首先是我们的friend页面中

在js文件中:

两个主要函数

getNewFriends()

 // 功能:当点击新的朋友的时候,跳转到新的朋友页面

addFriend(e)

// 功能:当点击添加好友的时候,创建关于用户和对应好友的聊天表
// 思路:1.通过获取对应数组的角标,获取对应的用户信息userList中
//      2.将用户和对应好友的用户信息都作为数据库表信息,添加到我们的数据库表中
const app=getApp()
Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getAllUser();},// 功能:获取所有的用户信息getAllUser(){var that=this;wx.cloud.database().collection("chat_users1").get({success(res){console.log(res)that.setData({userList:res.data})}})},// 功能:当点击新的朋友的时候,跳转到新的朋友页面getNewFriends(){wx.navigateTo({url: '/pages/newFridends/newFridends',})},// 功能:当点击添加好友的时候,创建关于用户和对应好友的聊天表
// 思路:1.通过获取对应数组的角标,获取对应的用户信息userList中
//      2.将用户和对应好友的用户信息都作为数据库表信息,添加到我们的数据库表中addFriend(e){// // 功能:当点击添加好友的时候,判断是否登录,只有登录才可以添加好友// if(!app.globalData. userInfo){//   wx.showToast({//     icon:"none",//     title: '请登录',//   })// }console.log(e.currentTarget.dataset.index)//查看点击情况var index=e.currentTarget.dataset.indexvar that=this;wx.cloud.database().collection("chat_record1").add({data:{userA_faceImg:app.globalData.userInfo.faceImg,//头像userA_id:app.globalData.userInfo._id,//唯一身份标识符userA_nickName:app.globalData.userInfo.nickName,//昵称userB_faceImg:that.data.userList[index].faceImg,//头像userB_id:that.data.userList[index]._id,//唯一身份标识符userB_nickName:that.data.userList[index].nickName,//昵称isFriend:0,//是否是好友,0代表发送请求,1代表是好友record:[]//聊天内容进行记录},success(res){console.log(res)wx.showToast({title: '发送请求成功',})}})}})

在wxml文件中:

<view bindtap="getNewFriends">新的朋友:</view>
<view>推荐好友:</view><block class="list_fox" wx:for="{{userList}}"><view class="list_item"><view class="left"><image class="ima" src="{{item.faceImg}}"></image><view class="name">{{item.nickName}}</view></view><view class="right" bindtap="addFriend" data-index="{{index}}">添加好友</view></view></block><view>我的好友:</view>

在wxss文件中:

.myfriends{margin-left: 10rpx;}
.ima{width: 120rpx ;height: 120rpx;border-radius: 50%;
}
.list_item{margin: 10rpx 10rpx;padding: 10rpx;display: flex;flex-direction: row;}
.name{margin: 10rpx 10rpx 10rpx 30rpx;
}
.left{display: flex;flex-direction: row;}
.right{margin: 10rpx 0rpx 0rpx 350rpx;
}

其次是我们的newfriends页面

在我们的js文件中:

addFriend_yes(e)

// 功能:当点击同意的时候,更新聊天表格中的信息,确认添加为好友。
// 思路:1.先获取具体是同意哪一个好友的验证,使用index.
//            2.根据我们点击的具体好友的的信息记录情况,获取两人好友信息。
//            3.更新其中的好友状态信息

getNewFriends()

  // 功能:当打开页面的时候,加载所有的新的朋友// 思路:1.获取自己的_id//             2.在我们的聊天记录表中查询,当userB_id和我们自身的_id一样的时候,我们就获取到了关于申请好友的信息//             3.将获取到的信息表赋值给本页的data中,在wxml页面中渲染

注意在页面开始加载的时候就要调用我们的getNewFriends()函数。

const app=getApp()
Page({data: {},onLoad(options) {this.getNewFriends();},// 功能:当打开页面的时候,加载所有的新的朋友// 思路:1.获取自己的_id//       2.在我们的聊天记录表中查询,当userB_id和我们自身的_id一样的时候,我们就获取到了关于申请好友的信息//       3.将获取到的信息表赋值给本页的data中,在wxml页面中渲染getNewFriends(){var that=this;console.log(app.globalData.userInfo._id)wx.cloud.database().collection("chat_record1").where({userB_id:app.globalData.userInfo._id,isFriend:0,}).get({success(res){that.setData({newFridendsList:res.data})console.log(res)}})},// 功能:当点击同意的时候,更新聊天表格中的信息,确认添加为好友。
// 思路:1.先获取具体是同意哪一个好友的验证,使用index.
//      2.根据我们点击的具体好友的的信息记录情况,获取两人好友信息。
//      3.更新其中的好友状态信息addFriend_yes(e){var that=thisconsole.log(e.currentTarget.dataset.index)const index=e.currentTarget.dataset.indexwx.cloud.database().collection("chat_record1").doc(that.data.newFridendsList[index]._id).update({data:{isFriend:1},success(res){wx.switchTab({url: '/pages/friends/friends',})wx.showToast({title: '添加成功',})console.log(res)}})}})

在wxml文件中:

 <block wx:for="{{newFridendsList}}"><view class="img-zh" ><view class="left"><image class="img" src="{{item.userA_faceImg}}"></image><view class="img-text">{{item.userA_nickName}}</view>    </view><view class="right" bindtap="addFriend_yes" data-index="{{index}}">同意</view></view>
</block> 

在我们的样式文件wxss文件中:

.img-zh{display: flex;flex-direction: row;height: 120rpx;margin: 10rpx 10rpx 0rpx 20rpx;justify-content: space-between;}
/*头像图片样式 */
.img{border-radius: 50%;height: 100rpx;width: 100rpx;margin-top: 10rpx;
}
/* 账号显示样式 */
.img-text{margin: 40rpx;
}
.left{display: flex;flex-direction: row;
}
.right{margin: 45rpx 20rpx 0rpx 5rpx;
}

#####步骤四、我的好友页面渲染

具体效果:

在这里插入图片描述

思路:

  • 本质
    查询满足条件的聊天表
    isfriend
    userA_id或者userB_id。因为A和B主要是看谁先发出申请,发出之后,就用这张表。
  • 方法
    同时查询两类条件
  • 渲染(wxml)
    将返回到的列表,给本页的data中
    我的好友页面,展示的是我的好友,而不是我。所以,userA或者userB都可能是我们的好友。因此,进行一个判断,如果是我们自己的时候,暂时另外一个user。
  • 注意
    在页面展示的时候都要调用,以便于我们直接显示好友。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOqJbChu-1659623322426)(C:\Users\xieyahao\AppData\Roaming\Typora\typora-user-images\image-20220801223323842.png)]

在我们的好友页面中:

js文件:

const app=getApp()
Page({/*** 页面的初始数据*/data: {},onShow(){this.getAllUser();this.myFriends();// 功能:当每次打开的时候,我们渲染好友页面的时,需要有一个判断,这个时候要用到userinfothis.setData({userInfo:app.globalData.userInfo})},/*** 生命周期函数--监听页面加载*/onLoad(options) {//  this.getAllUser();},// 功能:获取所有的用户信息getAllUser(){var that=this;wx.cloud.database().collection("chat_users1").get({success(res){console.log(res)that.setData({userList:res.data})}})},// 功能:当点击新的朋友的时候,跳转到新的朋友页面getNewFriends(){wx.navigateTo({url: '/pages/newFridends/newFridends',})},// 功能:当点击添加好友的时候,创建关于用户和对应好友的聊天表
// 思路:1.通过获取对应数组的角标,获取对应的用户信息userList中
//      2.将用户和对应好友的用户信息都作为数据库表信息,添加到我们的数据库表中addFriend(e){// // 功能:当点击添加好友的时候,判断是否登录,只有登录才可以添加好友// if(!app.globalData. userInfo){//   wx.showToast({//     icon:"none",//     title: '请登录',//   })// }console.log(e.currentTarget.dataset.index)//查看点击情况var index=e.currentTarget.dataset.indexvar that=this;wx.cloud.database().collection("chat_record1").add({data:{userA_faceImg:app.globalData.userInfo.faceImg,//头像userA_id:app.globalData.userInfo._id,//唯一身份标识符userA_nickName:app.globalData.userInfo.nickName,//昵称userB_faceImg:that.data.userList[index].faceImg,//头像userB_id:that.data.userList[index]._id,//唯一身份标识符userB_nickName:that.data.userList[index].nickName,//昵称isFriend:0,//是否是好友,0代表发送请求,1代表是好友record:[]//聊天内容进行记录},success(res){console.log(res)wx.showToast({title: '发送请求成功',})}})},// 功能:当我的好友页面展示的时候,显示出我的好友// 思路:1.查询聊天表中,A或B为我们userinfo相同_id同时,好友状态为1。注意这个时候可以用command.or//      2.将满足条件的值给到我们本页的data中//      3.渲染的时候,进行判断,因为A和B都可能是我们的好友,所以,当某个是我们好友的时候,不在本页渲染。myFriends(){var that = this;const _ = wx.cloud.database().commandwx.cloud.database().collection("chat_record1").where(_.or([{userA_id:app.globalData.userInfo._id,isFriend:1},{userB_id:app.globalData.userInfo._id,isFriend:1}])).get({success(res){console.log(res)that.setData({myFriendsList:res.data})}})},})

在wxml文件中:

<view bindtap="getNewFriends">新的朋友:</view>
<view>推荐好友:</view><block class="list_fox" wx:for="{{userList}}"><!-- <block wx:if="{{userInfo._id==item._id}}"> --><view class="list_item"><view class="left"><image class="ima" src="{{item.faceImg}}"></image><view class="name">{{item.nickName}}</view></view><view class="right" bindtap="addFriend" data-index="{{index}}">添加好友</view></view><!-- </block> --></block><view>我的好友:</view><block class="list_fox" wx:for="{{myFriendsList}}"><view  class="list_item"><!-- 其中的一个条件 --><block wx:if="{{userInfo._id==item.userA_id}}"><view class="left"><image class="ima" src="{{item.userB_faceImg}}"></image><view class="name">{{item.userB_nickName}}</view></view></block><!-- 其中的另外一个条件 --><block wx:if="{{userInfo._id==item.userB_id}}"><view class="left"><image class="ima" src="{{item.userA_faceImg}}"></image><view class="name">{{item.userA_nickName}}</view></view></block></view></block>

在wxss文件中:

.myfriends{margin-left: 10rpx;}
.ima{width: 120rpx ;height: 120rpx;border-radius: 50%;
}
.list_item{margin: 10rpx 10rpx;padding: 10rpx;display: flex;flex-direction: row;}
.name{margin: 10rpx 10rpx 10rpx 30rpx;
}
.left{display: flex;flex-direction: row;}
.right{margin: 10rpx 0rpx 0rpx 350rpx;
}

http://chatgpt.dhexx.cn/article/FXm8QODi.shtml

相关文章

微信聊天小程序——(五、添加好友)

五、添加好友 步骤一、通过搜索添加好友 具体效果&#xff1a; 思路&#xff1a; 本质上来讲&#xff0c;就是通过输入框得到好友账号信息&#xff0c;之后再数据库中查询&#xff0c;最后返回并渲染查询结果。首先&#xff0c;得到输入框的值&#xff0c;并传递到我们的页面…

支付宝小程序平台的IM聊天插件

文章目录 前言一、用户端1.基本展示2.难处理的点二、另一用户端1.前端websocket的整合2.手机息屏websocket断线问题2.websocket服务端配置3.后端整合websocket作为服务端&#xff0c;传输消息给前端 总结 前言 最近工作需求来了个项目&#xff0c;前景为在支付宝平台上发布一个…

使用 Python 编写一个聊天小程序

欢迎关注 “小白玩转Python”&#xff0c;发现更多 “有趣” 本篇文章分享如何用相当简洁的 Python 代码制作一个简单的聊天应用程序。更重要的是&#xff0c;我已经实现了没有任何第三方依赖的代码&#xff01; 首先&#xff0c;我创建了一个聊天服务器&#xff0c;通过它可以…

小米手机解BL锁教程

1.找到设置&#xff0c;找到我的设备 2.点击全部参数&#xff0c;多点几下miui版本&#xff0c;直到弹出开发者模式提醒。 3.返回&#xff0c;找到更多设置 4.找到开发者选项 5.找到设备定状态 6.绑定账号和设备&#xff0c;关机&#xff0c;按开键加音量减&#xff0c;进去fas…

安卓搞机玩机-什么是“锁 ” BL锁 屏幕锁 账号锁 设备锁等分析

相信把玩安卓机型的友友们都大概了解机型的锁是什么概念。但有些友友可能还分不清楚具体锁的概念。今天这个帖子由浅入深的带你了解安卓机型中各种“锁”的概念.这类话题比较敏感。只是大概带你分清楚锁的分类和基本对应的解锁方式. 一.屏幕锁【 图案锁 指纹锁 数字锁 人…

万能小米手机解锁,刷机,默认破解BL锁

写在第一条:下载之前请注意 本软件不支持最新机型,只支持4代和4代以前的机型,请注意 早就想给自己的小米手机刷机了&#xff0c;奈何一直没有门&#xff0c;最后还在求助了万能的淘宝&#xff0c;刚刚在淘宝花了 30大洋买的刷机工具&#xff0c;刷机成功之后&#xff0c;才反…

xiaomi 小米 红米redmi 秒解锁BL锁,不用等,在线秒解锁BL工具介绍

xiaomi 小米 红米redmi 秒解锁BL锁,不用等&#xff0c;在线秒解锁BL Xlaomi Redmi K40 Gaming Xlaomt Poco F3 GT Gaming Xaoml Poco X3 GT Xaoml Redmi Note9 5G Xlaomi Redml Note 10 Pro 5G Xlaoml Redmi Note 10 5G Xlaoml Redml Note 10T 5G Xlaoml Poco M3 Pro 5G Xaoml…

小米手机解BL锁、线刷详细教程,适用于小米全系列手机

[教程] 小米手机解BL锁、线刷详细教程&#xff0c;适用于小米全系列手机 这几天看到论坛里很多人在问怎么线刷&#xff0c;下面我就做个详细的线教程大家看一下高手别喷我哈 此教程只适合刷官方MIUI包 进入正题。 第一步&#xff1a;解BL锁 1.浏览器打开申请解锁小米手机点击立…

android@解bl锁@twrp的刷入和使用问题

文章目录 解bl锁步骤 附:MIUI线刷工具待线刷设备扫面和检查使用方式线刷工具卡住的关闭方法 第三方recoverytwrp解密datadata decrypt清除data后用twrp中刷入文件刷入面具 如何找到合适的TWRP rec ref 解bl锁 不是所有android设备都支持解锁下面是以最为典型的MIUI android设备…

02_Lock锁

首先看一下JUC的重磅武器——锁&#xff08;Lock&#xff09; 相比同步锁&#xff0c;JUC包中的Lock锁的功能更加强大&#xff0c;它提供了各种各样的锁&#xff08;公平锁&#xff0c;非公平锁&#xff0c;共享锁&#xff0c;独占锁……&#xff09;&#xff0c;所以使用起来…

红米note10 pro机型解除“账号锁”的一些操作案例 mtk机型强解bl锁

前言。操作解除锁类案例只限于自己的机型&#xff0c; 因手机号长期不用或者忘记密码导致账号锁出现的问题 机型哦 我经常在csdn网站分享一些玩机中的实测资源和玩机常识。遇到很多玩机的友友&#xff0c;其中我分享的一个资源&#xff0c;这个粉丝朋友下载后在网吧操作不了。…

穷举法解华为bl锁

穷举法解华为bl锁 python3代码测试截图 灵感来自于&#xff1a;https://blog.csdn.net/qq_40169767/article/details/90481748 但是我不懂shell脚本&#xff0c;那个脚本又运行不了&#xff0c;所以我用python写了一个&#xff0c; 穷举要0.05s*9999999999999999/60*60*24*3651…

玩机搞机---关于安卓机型工厂固件 刷机 端口解密 解bl锁 写串 nv损坏 等相关常识

*******工程机和工厂固件方面的常识 可能很多玩机友友对什么是工厂固件比较陌生。那么今天的话题就围绕这个和大家讨论下。其实一般厂家的流程都是在一部机型推放市场之前&#xff0c;需要经过预研企划、研发设计、全面测试等诸多环节。在这一整个改善的全过程中&#xff0c;厂…

小米解锁BL锁(普通解锁)

关于BL锁&#xff0c;BootLoader锁&#xff0c;WIKI上的解释简单一点说就是 启动操作系统的软件&#xff0c;也就是引导程序&#xff0c;用于初始化内存等。 官方的说法是防止篡改程序所造成用户的经济和数据损失&#xff0c;网上的说法是可定义程度高&#xff0c;可卸载系统预…

Android系统刷机教程之解bl锁

由于安卓系统是基于linux开发的&#xff0c;属于嵌入式操作系统。在嵌入式操作系统中&#xff0c;BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图&#xff0c;从而将系统的软硬件环境带到一个合适状态&#xff0c;以便为最终调用操作系统内核…

oppo r11 r11t解BL锁安装面具magisk详细教程

OPPO r11 r11t是高通骁龙660处理器&#xff0c;这个系列要解bl锁网上有很多教程比较http://rom点7to点cn/jiaochengdetail/16880 解好BL锁后就可以找三方rec&#xff0c;刷入rec 进入三方rec&#xff0c;把小包发送到手机硬盘&#xff0c;安装小包&#xff0c;再次重启进入三方…

华为手机一键解锁工具箱下载 | 华为手机解BL锁软件: 支持解锁bootloader,刷写recovery功能

文章目录 1. 软件介绍2. 特色功能3. 资源站点4. 下载地址5. 软件截图6. 安装教程7. 使用教程7.1. 解锁BL 1. 软件介绍 通过这款华为手机实用工具箱可以对你的华为手机系列进行刷机、解锁等操作&#xff0c;网上这种华为刷机解锁工具比较少&#xff0c;那么这款华为手机实用工具…

小米手机解bl锁正规方法!

申请解锁小米手机http://www.miui.com/unlock/download.html在手机上打开开发者模式&#xff0c;在开发者模式下-》设备解锁状态 然后关了wifi用手机卡上网绑定设备。 之后在菜单上选择清除所有数据&#xff0c;然后进入系统即可。

[HBZ分享] 小米手机如何解BL锁

第一步&#xff1a; 进入【设置—>我的设备–>全部参数–>连续疯狂的点MIUI版本那一行】 第二步&#xff1a;进入【更多设置–>开发者模式】&#xff0c;打开USB调试 与 USB安装 第三步&#xff1a;进入【更多设置–>开发者模式】&#xff0c;进入【设别解锁状…

9008 能 解锁BL_手机刷入面具及twrp教程(包含解bl锁教程)

原文作者:sgq694243467 原文链接:https://www.52pojie.cn/thread-1288591-1-1.html 最近了买黑鲨3pro 因为miui的广告很烦就想刷面具和xp框架屏蔽广告,但是网上似乎没什么教程,不是要收费就是空壳教程。经过一天测试和查找最终自己刷好了面具 root 和xp框架参考链接 https:…