三、獲取好友列表
步驟一、展示所有好友的推薦列表(friends頁(yè)面)
具體效果:
實(shí)現(xiàn)思路:
- 我們有我們的用戶數(shù)據(jù)庫(kù)表即:uers
- 循環(huán)我們的數(shù)據(jù)庫(kù)用戶表,達(dá)到所有的用戶信息,即:userList
- 利用云函數(shù)拿到我們的userList,賦值給data,之后再頁(yè)面中顯示出來(lái)
- 顯示的時(shí)候,注意用 onLoad調(diào)用,因?yàn)槊看雾?yè)面打開(kāi)都需要加載
注意:因?yàn)楹糜蚜斜碓诿恳淮未蜷_(kāi)頁(yè)面的時(shí)候都要加載,所以,我們寫(xiě)在頁(yè)面函數(shù)中。
在js文件中:
// pages/friends/friends.js
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
},
//在每次頁(yè)面加載的時(shí)候進(jìn)行調(diào)用
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>
//寫(xiě)一個(gè)block,經(jīng)常用來(lái)接收一堆相同的數(shù)據(jù)
<block class="list_fox" wx:for="{{userList}}">
//里面的圖片和文本用view標(biāo)簽包裹,為了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;
}
具體效果演示:
步驟二、修飾好友頁(yè)面
效果:
思路:
-
主要是樣式部分
-
頁(yè)面的數(shù)據(jù)已經(jīng)在上一個(gè)步驟中已經(jīng)獲取,即,userList
-
這個(gè)頁(yè)面進(jìn)行調(diào)用就行
-
調(diào)用的時(shí)候,使用block組件,循環(huán)我們獲取到的用戶表
在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({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
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文件中:
注意這個(gè)時(shí)候,我們?cè)O(shè)計(jì)樣式的思路:
一行有兩個(gè)盒子,左邊一個(gè),右邊一個(gè)。
其中,左邊的盒子里有兩個(gè)小盒子。
.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;
}
步驟三、添加好友
具體效果:
思路:
- 本質(zhì)上是建立一個(gè)新的聊天記錄表,在這個(gè)表格中進(jìn)行操作.
這個(gè)表格有的參數(shù)
聊天記錄
是否為好友
雙方信息
當(dāng)然有_id_ - 當(dāng)一方發(fā)出請(qǐng)求時(shí),建立一個(gè)聊天記錄表
聊天記錄 空數(shù)組
是否為好友0
雙方信息 userA和userB - 當(dāng)?shù)卿浟硗庖粋€(gè)賬號(hào)的時(shí)候,從對(duì)方的“我的好友”頁(yè)面,能收到消息
- _在我的新朋友頁(yè)面本質(zhì)上就是:查詢是否有人發(fā)出好友驗(yàn)證信息,即,userB的_id是否等于此賬號(hào)的_id,并且isfriend是否為0
- 將獲取到的相應(yīng)的聊天表賦值給本頁(yè)的data,同時(shí)在頁(yè)面中顯示。
- 如果點(diǎn)擊“同意添加好友”,就意味著向我們的聊天記錄表中,查詢自己是被邀請(qǐng)方,升級(jí)我們的好友狀態(tài)isfriend為1。
首先是我們的friend頁(yè)面中
在js文件中:
兩個(gè)主要函數(shù)
getNewFriends()
// 功能:當(dāng)點(diǎn)擊新的朋友的時(shí)候,跳轉(zhuǎn)到新的朋友頁(yè)面
addFriend(e)
// 功能:當(dāng)點(diǎn)擊添加好友的時(shí)候,創(chuàng)建關(guān)于用戶和對(duì)應(yīng)好友的聊天表
// 思路:1.通過(guò)獲取對(duì)應(yīng)數(shù)組的角標(biāo),獲取對(duì)應(yīng)的用戶信息userList中
// 2.將用戶和對(duì)應(yīng)好友的用戶信息都作為數(shù)據(jù)庫(kù)表信息,添加到我們的數(shù)據(jù)庫(kù)表中
const app=getApp()
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
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
})
}
}
)
},
// 功能:當(dāng)點(diǎn)擊新的朋友的時(shí)候,跳轉(zhuǎn)到新的朋友頁(yè)面
getNewFriends(){
wx.navigateTo({
url: '/pages/newFridends/newFridends',
})
},
// 功能:當(dāng)點(diǎn)擊添加好友的時(shí)候,創(chuàng)建關(guān)于用戶和對(duì)應(yīng)好友的聊天表
// 思路:1.通過(guò)獲取對(duì)應(yīng)數(shù)組的角標(biāo),獲取對(duì)應(yīng)的用戶信息userList中
// 2.將用戶和對(duì)應(yīng)好友的用戶信息都作為數(shù)據(jù)庫(kù)表信息,添加到我們的數(shù)據(jù)庫(kù)表中
addFriend(e){
// // 功能:當(dāng)點(diǎn)擊添加好友的時(shí)候,判斷是否登錄,只有登錄才可以添加好友
// if(!app.globalData. userInfo){
// wx.showToast({
// icon:"none",
// title: '請(qǐng)登錄',
// })
// }
console.log(e.currentTarget.dataset.index)//查看點(diǎn)擊情況
var index=e.currentTarget.dataset.index
var that=this;
wx.cloud.database().collection("chat_record1").add({
data:{
userA_faceImg:app.globalData.userInfo.faceImg,//頭像
userA_id:app.globalData.userInfo._id,//唯一身份標(biāo)識(shí)符
userA_nickName:app.globalData.userInfo.nickName,//昵稱
userB_faceImg:that.data.userList[index].faceImg,//頭像
userB_id:that.data.userList[index]._id,//唯一身份標(biāo)識(shí)符
userB_nickName:that.data.userList[index].nickName,//昵稱
isFriend:0,//是否是好友,0代表發(fā)送請(qǐng)求,1代表是好友
record:[]//聊天內(nèi)容進(jìn)行記錄
},
success(res){
console.log(res)
wx.showToast({
title: '發(fā)送請(qǐng)求成功',
})
}
})
}
})
在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頁(yè)面
在我們的js文件中:
addFriend_yes(e)
// 功能:當(dāng)點(diǎn)擊同意的時(shí)候,更新聊天表格中的信息,確認(rèn)添加為好友。
// 思路:1.先獲取具體是同意哪一個(gè)好友的驗(yàn)證,使用index.
// 2.根據(jù)我們點(diǎn)擊的具體好友的的信息記錄情況,獲取兩人好友信息。
// 3.更新其中的好友狀態(tài)信息
getNewFriends()
// 功能:當(dāng)打開(kāi)頁(yè)面的時(shí)候,加載所有的新的朋友
// 思路:1.獲取自己的_id
// 2.在我們的聊天記錄表中查詢,當(dāng)userB_id和我們自身的_id一樣的時(shí)候,我們就獲取到了關(guān)于申請(qǐng)好友的信息
// 3.將獲取到的信息表賦值給本頁(yè)的data中,在wxml頁(yè)面中渲染
注意在頁(yè)面開(kāi)始加載的時(shí)候就要調(diào)用我們的getNewFriends()函數(shù)。
const app=getApp()
Page({
data: {
},
onLoad(options) {
this.getNewFriends();
},
// 功能:當(dāng)打開(kāi)頁(yè)面的時(shí)候,加載所有的新的朋友
// 思路:1.獲取自己的_id
// 2.在我們的聊天記錄表中查詢,當(dāng)userB_id和我們自身的_id一樣的時(shí)候,我們就獲取到了關(guān)于申請(qǐng)好友的信息
// 3.將獲取到的信息表賦值給本頁(yè)的data中,在wxml頁(yè)面中渲染
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)
}
})
},
// 功能:當(dāng)點(diǎn)擊同意的時(shí)候,更新聊天表格中的信息,確認(rèn)添加為好友。
// 思路:1.先獲取具體是同意哪一個(gè)好友的驗(yàn)證,使用index.
// 2.根據(jù)我們點(diǎn)擊的具體好友的的信息記錄情況,獲取兩人好友信息。
// 3.更新其中的好友狀態(tài)信息
addFriend_yes(e){
var that=this
console.log(e.currentTarget.dataset.index)
const index=e.currentTarget.dataset.index
wx.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;
}
/* 賬號(hào)顯示樣式 */
.img-text{
margin: 40rpx;
}
.left{
display: flex;
flex-direction: row;
}
.right{
margin: 45rpx 20rpx 0rpx 5rpx;
}
#####步驟四、我的好友頁(yè)面渲染
具體效果:
思路:
- 本質(zhì)
查詢滿足條件的聊天表
isfriend
userA_id或者userB_id。因?yàn)锳和B主要是看誰(shuí)先發(fā)出申請(qǐng),發(fā)出之后,就用這張表。 - 方法
同時(shí)查詢兩類條件 - 渲染(wxml)
將返回到的列表,給本頁(yè)的data中
我的好友頁(yè)面,展示的是我的好友,而不是我。所以,userA或者userB都可能是我們的好友。因此,進(jìn)行一個(gè)判斷,如果是我們自己的時(shí)候,暫時(shí)另外一個(gè)user。 - 注意
在頁(yè)面展示的時(shí)候都要調(diào)用,以便于我們直接顯示好友。
在我們的好友頁(yè)面中:
js文件:
const app=getApp()
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
},
onShow(){
this.getAllUser();
this.myFriends();
// 功能:當(dāng)每次打開(kāi)的時(shí)候,我們渲染好友頁(yè)面的時(shí),需要有一個(gè)判斷,這個(gè)時(shí)候要用到userinfo
this.setData(
{
userInfo:app.globalData.userInfo
}
)
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
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
})
}
}
)
},
// 功能:當(dāng)點(diǎn)擊新的朋友的時(shí)候,跳轉(zhuǎn)到新的朋友頁(yè)面
getNewFriends(){
wx.navigateTo({
url: '/pages/newFridends/newFridends',
})
},
// 功能:當(dāng)點(diǎn)擊添加好友的時(shí)候,創(chuàng)建關(guān)于用戶和對(duì)應(yīng)好友的聊天表
// 思路:1.通過(guò)獲取對(duì)應(yīng)數(shù)組的角標(biāo),獲取對(duì)應(yīng)的用戶信息userList中
// 2.將用戶和對(duì)應(yīng)好友的用戶信息都作為數(shù)據(jù)庫(kù)表信息,添加到我們的數(shù)據(jù)庫(kù)表中
addFriend(e){
// // 功能:當(dāng)點(diǎn)擊添加好友的時(shí)候,判斷是否登錄,只有登錄才可以添加好友
// if(!app.globalData. userInfo){
// wx.showToast({
// icon:"none",
// title: '請(qǐng)登錄',
// })
// }
console.log(e.currentTarget.dataset.index)//查看點(diǎn)擊情況
var index=e.currentTarget.dataset.index
var that=this;
wx.cloud.database().collection("chat_record1").add({
data:{
userA_faceImg:app.globalData.userInfo.faceImg,//頭像
userA_id:app.globalData.userInfo._id,//唯一身份標(biāo)識(shí)符
userA_nickName:app.globalData.userInfo.nickName,//昵稱
userB_faceImg:that.data.userList[index].faceImg,//頭像
userB_id:that.data.userList[index]._id,//唯一身份標(biāo)識(shí)符
userB_nickName:that.data.userList[index].nickName,//昵稱
isFriend:0,//是否是好友,0代表發(fā)送請(qǐng)求,1代表是好友
record:[]//聊天內(nèi)容進(jìn)行記錄
},
success(res){
console.log(res)
wx.showToast({
title: '發(fā)送請(qǐng)求成功',
})
}
})
},
// 功能:當(dāng)我的好友頁(yè)面展示的時(shí)候,顯示出我的好友
// 思路:1.查詢聊天表中,A或B為我們userinfo相同_id同時(shí),好友狀態(tài)為1。注意這個(gè)時(shí)候可以用command.or
// 2.將滿足條件的值給到我們本頁(yè)的data中
// 3.渲染的時(shí)候,進(jìn)行判斷,因?yàn)锳和B都可能是我們的好友,所以,當(dāng)某個(gè)是我們好友的時(shí)候,不在本頁(yè)渲染。
myFriends(){
var that = this;
const _ = wx.cloud.database().command
wx.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文件中:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-486269.html
<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">
<!-- 其中的一個(gè)條件 -->
<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>
<!-- 其中的另外一個(gè)條件 -->
<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文件中:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-486269.html
.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;
}
到了這里,關(guān)于微信聊天小程序——(三、獲取好友列表)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!