知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序?qū)崙?zhàn)--創(chuàng)建friendList字段實(shí)現(xiàn)好友關(guān)系(添加好友功能) ...
發(fā)表時(shí)間:2021-1-11
發(fā)布人:葵宇科技
瀏覽次數(shù):223
回顧:之前我們進(jìn)行了刪除的功能,以及對(duì)message消息的增刪,下面實(shí)現(xiàn)添加好友的功能
我們先在數(shù)據(jù)庫(kù)中,在message這個(gè)字段的list里面,添加上測(cè)試號(hào)的id,就是模擬這個(gè)兩個(gè)測(cè)試號(hào)要加我主號(hào)的效果“
就可以達(dá)到這個(gè)效果了
下面我們正式開(kāi)始實(shí)現(xiàn)
1、在removeList的wxml的昵稱結(jié)構(gòu)處添加一個(gè)點(diǎn)擊事件handleAddFriend
2、在removeList.js中來(lái)實(shí)現(xiàn)這個(gè)點(diǎn)擊事件即可的,并且它也是要提示(讓用戶選擇確認(rèn)的這種,所以就可以直接copy前面的刪除按鈕的代碼
直接把hanleDelMessage函數(shù)里面的:
wx.showModal({
title: '提示信息',
content: '刪除消息',
confirmText: "刪除",
success: (res) => {
if (res.confirm) {
} else if (res.cancel) {
console.log('用戶點(diǎn)擊取消')
}
}
})
}
也就是只用設(shè)計(jì)在點(diǎn)擊了確定之后的一些列操作即可了
3、因?yàn)橐獦?gòu)建好友之間的關(guān)系,所以要在user里面加一個(gè)friendlist字段才行了,并且這個(gè)字段的數(shù)據(jù)類型是數(shù)組的,因?yàn)楹糜芽隙ú恢皇且粋€(gè)
4、在數(shù)據(jù)庫(kù)中給每個(gè)人都添加一個(gè)friendList字段
但是不要忘記了在原來(lái)的程序中 初始化 用戶的時(shí)候也要加上讀i這個(gè)字段的初始化才行的
打開(kāi)user.js:
5、后面的事情大概的邏輯就是:同意了好友申請(qǐng)的話,這個(gè)用戶的id就會(huì)出現(xiàn)在這個(gè)用戶的friendList數(shù)組里面了
所以就可以回到removeList.js文件中去了
6、通過(guò)在開(kāi)頭的時(shí)候 設(shè)置 const _ = db.command 就可以讓這個(gè)文件有了運(yùn)算的能力了
handleAddFriend(){
wx.showModal({
title: '提示信息',
content: '申請(qǐng)好友',
confirmText: "同意",
success: (res) => {
if (res.confirm) {
db.collection('users').doc(app.userInfo._id).update({
data:{
friendList : _.unshift(this.data.messageId)
}
}).then((res)=>{});
} else if (res.cancel) {
console.log('用戶點(diǎn)擊取消')
}
}
})
}
}
在點(diǎn)擊消息之后,就可以選擇“確定”,點(diǎn)擊了之后,就可以在數(shù)據(jù)庫(kù)上面看到添加的用戶好友了
(以上就是第一步,把要申請(qǐng)的用戶的id給添加過(guò)來(lái)了)----但是問(wèn)題來(lái)了,我的主號(hào)里面的friendList里面有了這個(gè)申請(qǐng)人的id,但是這個(gè)申請(qǐng)人在我
同意了之后,它的friendList字段里面也應(yīng)該有我的主號(hào)的id才對(duì)的---也就是同時(shí)添加他們兩個(gè)的好友關(guān)系即可
但是能不能通過(guò)上面的這種方式,把兩個(gè)變量之間的值作為交換就可以的,普通的數(shù)據(jù)庫(kù)里面是可以這樣的。但是在小程序中式不可以這樣進(jìn)行操作的
(因?yàn)樵谛〕绦蚶锩鎸?duì)數(shù)據(jù)庫(kù)的訪問(wèn)式有權(quán)限的,在客戶端是組偶到這樣的操作
(也就是對(duì)其他的賬號(hào)進(jìn)行更新操作的話在客戶端里面是不允許的---同理也是要在服務(wù)端里面來(lái)實(shí)現(xiàn)的))
--也就是要用云函數(shù)來(lái)實(shí)現(xiàn)了
7、如果要像的客戶端中調(diào)用unshift一樣的話在服務(wù)端里面進(jìn)行調(diào)用的話,之前也搞過(guò)就是用一個(gè)模板字符串的寫(xiě)法 用Esc下面的那個(gè) “類單引號(hào)”的符號(hào)
來(lái)進(jìn)行包裹就好了
wx.cloud.callFunction({
name : 'update',
data : {
collection : 'users',
doc : this.data.messageId,
data : {
friendList: ` _.unshift('${app.userInfo._id}')`
}
}
});
出現(xiàn)的錯(cuò)誤就是,我們把unshift也一起搞過(guò)來(lái)了,也就是我們傳過(guò)去的字符串沒(méi)有解析成功
主要就是下面這里寫(xiě)錯(cuò)了
data : `{ friendList: _.unshift('${app.userInfo._id}')}`
是把后面整個(gè)的串都用一個(gè)` .... `來(lái)圍住的(也就是后面整個(gè)的json對(duì)象都直接被這個(gè)符號(hào)扣住的)
修改了之后就成功了
8、新建一個(gè)removeMessage 函數(shù),可以直接copy上面的handledelMessage方法里面的:這個(gè)函數(shù)主要是為了點(diǎn)擊這個(gè)消息加好友的時(shí)候,可以選擇是
添加它為好友,就是在點(diǎn)擊了添加好友之后,就要把這個(gè)消息刪掉了,所以這兩個(gè)地方都用到了這個(gè)功能的話,就可以把這個(gè)功能封裝在removeMesage函數(shù)里面,如何直接用this.removeMessage來(lái)調(diào)用即可了
效果就是:點(diǎn)擊了添加它為好友之后,這個(gè)申請(qǐng)為好友的消息就會(huì)被刪掉了
db.collection('message').where({
userId : app.userInfo._id
}).get().then((res)=>{
// console.log(res);
let list = res.data[0].list;
console.log(list);
list = list.filter((val , i)=>{
return val != this.data.messageId
});
// console.log(list);
wx.cloud.callFunction({
name : 'update',
data : {
collection : 'message',
where : {
userId : app.userInfo._id
},
data : {
list : list
}
}
}).then((res)=>{
this.triggerEvent('myevent',list)
});
});
整體邏輯:
1、在removeList.wxml 中的昵稱中添加一個(gè)點(diǎn)擊事件
<movable-view bindtap="handleAddFriend" direction="horizontal" class="view">{{ userMessage.nickName }}</movable-view>
2、在removeList.js中隊(duì)這個(gè)點(diǎn)擊事件進(jìn)行渲染
handleAddFriend(){
wx.showModal({
title: '提示信息',
content: '申請(qǐng)好友',
confirmText: "同意",
success: (res) => {
if (res.confirm) {
db.collection('users').doc(app.userInfo._id).update({
data:{
friendList : _.unshift(this.data.messageId)
}
}).then((res)=>{});
//其他用戶和我構(gòu)成好友的關(guān)系,用到客戶端來(lái)實(shí)現(xiàn)(也就是用云函數(shù)來(lái)實(shí)現(xiàn))
wx.cloud.callFunction({
name : 'update',
data : {
collection : 'users',
doc : this.data.messageId,
data : `{ friendList: _.unshift('${app.userInfo._id}')}`
}
}).then((res)=>{});
this.removeMessage();
} else if (res.cancel) {
console.log('用戶點(diǎn)擊取消')
}
}
})
}
3、點(diǎn)擊了接受邀請(qǐng)之后,把這個(gè)申請(qǐng)好友的消息刪除(和之前實(shí)現(xiàn)刪除功能一樣,就可以直接把這個(gè)功能封裝到removeMessage這個(gè)函數(shù)里面
removeMessage(){
//也就是點(diǎn)擊了確定的話,就不提示這個(gè)了,而是刪除信息
// 目前沒(méi)有直接更新的,智能是這個(gè)過(guò)程就變成了先查詢?nèi)缓笤俑?/span>
db.collection('message').where({
userId: app.userInfo._id
}).get().then((res) => {
// console.log(res);
let list = res.data[0].list;
console.log(list);
list = list.filter((val, i) => {
return val != this.data.messageId
});
// console.log(list);
wx.cloud.callFunction({
name: 'update',
data: {
collection: 'message',
where: {
userId: app.userInfo._id
},
data: {
list: list
}
}
}).then((res) => {
this.triggerEvent('myevent', list)
});
});
注意:因?yàn)槲覀冮_(kāi)通了一個(gè)friendList 給每一個(gè)用戶數(shù)據(jù)庫(kù)字段,所以在user.js初始化用戶數(shù)據(jù)庫(kù)的時(shí)候也要加上初始化這個(gè)friendList數(shù)組才行。
相關(guān)案例查看更多
相關(guān)閱讀
- 云南軟件公司
- 開(kāi)發(fā)框架
- 云南網(wǎng)站建設(shè)百度官方
- 云南etc小程序
- 小程序開(kāi)發(fā)聯(lián)系方式
- 人口普查小程序
- 小程序密鑰
- 云南省住房建設(shè)廳網(wǎng)站
- 汽車報(bào)廢回收軟件
- 汽車報(bào)廢回收管理系統(tǒng)
- 網(wǎng)站建設(shè)快速優(yōu)化
- 網(wǎng)站建設(shè)案例
- 云南建設(shè)廳網(wǎng)站
- 高端網(wǎng)站建設(shè)公司
- 昆明網(wǎng)站制作
- 云南網(wǎng)站建設(shè)報(bào)價(jià)
- 小程序表單
- 網(wǎng)站維護(hù)
- 云南網(wǎng)站建設(shè)首頁(yè)
- 云南小程序開(kāi)發(fā)推薦
- 報(bào)廢車回收管理系統(tǒng)
- 小程序分銷商城
- 微分銷
- 汽車拆解管理軟件
- 云南網(wǎng)站設(shè)計(jì)
- 報(bào)廢車管理系統(tǒng)
- php網(wǎng)站
- 汽車回收系統(tǒng)
- 楚雄小程序開(kāi)發(fā)
- 區(qū)塊鏈