回顾:之前我们进行了删除的功能,以及对message消息的增删,下面实现添加好友的功能

我们先在数据库中,在message这个字段的list里面,添加上测试号的id,就是模拟这个两个测试号要加我主号的效果“

就可以达到这个效果了

下面我们正式开始实现

1、在removeList的wxml的昵称结构处添加一个点击事件handleAddFriend

2、在removeList.js中来实现这个点击事件即可的,并且它也是要提示(让用户选择确认的这种,所以就可以直接copy前面的删除按钮的代码

直接把hanleDelMessage函数里面的:

   wx.showModal({
title: '提示信息',
content: '删除消息',
confirmText: "删除",
success: (res) => {
if (res.confirm) { } else if (res.cancel) {
console.log('用户点击取消')
}
}
})
}

也就是只用设计在点击了确定之后的一些列操作即可了

3、因为要构建好友之间的关系,所以要在user里面加一个friendlist字段才行了,并且这个字段的数据类型是数组的,因为好友肯定不只是一个

4、在数据库中给每个人都添加一个friendList字段

但是不要忘记了在原来的程序中 初始化 用户的时候也要加上读i这个字段的初始化才行的

打开user.js:

5、后面的事情大概的逻辑就是:同意了好友申请的话,这个用户的id就会出现在这个用户的friendList数组里面了

所以就可以回到removeList.js文件中去了

6、通过在开头的时候 设置 const _ = db.command 就可以让这个文件有了运算的能力了

handleAddFriend(){
wx.showModal({
title: '提示信息',
content: '申请好友',
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('用户点击取消')
}
}
})
}
}

在点击消息之后,就可以选择“确定”,点击了之后,就可以在数据库上面看到添加的用户好友了

(以上就是第一步,把要申请的用户的id给添加过来了)----但是问题来了,我的主号里面的friendList里面有了这个申请人的id,但是这个申请人在我

同意了之后,它的friendList字段里面也应该有我的主号的id才对的---也就是同时添加他们两个的好友关系即可

但是能不能通过上面的这种方式,把两个变量之间的值作为交换就可以的,普通的数据库里面是可以这样的。但是在小程序中式不可以这样进行操作的

(因为在小程序里面对数据库的访问式有权限的,在客户端是组偶到这样的操作

(也就是对其他的账号进行更新操作的话在客户端里面是不允许的---同理也是要在服务端里面来实现的))

--也就是要用云函数来实现了

7、如果要像的客户端中调用unshift一样的话在服务端里面进行调用的话,之前也搞过就是用一个模板字符串的写法 用Esc下面的那个 “类单引号”的符号

来进行包裹就好了

 wx.cloud.callFunction({
name : 'update',
data : {
collection : 'users',
doc : this.data.messageId,
data : {
friendList: ` _.unshift('${app.userInfo._id}')`
}
}
});

出现的错误就是,我们把unshift也一起搞过来了,也就是我们传过去的字符串没有解析成功

主要就是下面这里写错了

 data : `{ friendList:  _.unshift('${app.userInfo._id}')}`

是把后面整个的串都用一个`   ....   `来围住的(也就是后面整个的json对象都直接被这个符号扣住的)

修改了之后就成功了

8、新建一个removeMessage 函数,可以直接copy上面的handledelMessage方法里面的:这个函数主要是为了点击这个消息加好友的时候,可以选择是

添加它为好友,就是在点击了添加好友之后,就要把这个消息删掉了,所以这两个地方都用到了这个功能的话,就可以把这个功能封装在removeMesage函数里面,如何直接用this.removeMessage来调用即可了

效果就是:点击了添加它为好友之后,这个申请为好友的消息就会被删掉了

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 中的昵称中添加一个点击事件

<movable-view bindtap="handleAddFriend" direction="horizontal" class="view">{{ userMessage.nickName }}</movable-view>

2、在removeList.js中队这个点击事件进行渲染

 handleAddFriend(){
wx.showModal({
title: '提示信息',
content: '申请好友',
confirmText: "同意",
success: (res) => {
if (res.confirm) {
db.collection('users').doc(app.userInfo._id).update({
data:{
friendList : _.unshift(this.data.messageId)
}
}).then((res)=>{}); //其他用户和我构成好友的关系,用到客户端来实现(也就是用云函数来实现)
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('用户点击取消') }
}
})
}

3、点击了接受邀请之后,把这个申请好友的消息删除(和之前实现删除功能一样,就可以直接把这个功能封装到removeMessage这个函数里面

removeMessage(){
//也就是点击了确定的话,就不提示这个了,而是删除信息
// 目前没有直接更新的,智能是这个过程就变成了先查询然后再更新
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)
});
});

注意:因为我们开通了一个friendList 给每一个用户数据库字段,所以在user.js初始化用户数据库的时候也要加上初始化这个friendList数组才行

Day10-微信小程序实战-交友小程序-创建friendList字段实现好友关系(添加好友功能)--内附代码的更多相关文章

  1. Day10-微信小程序实战-交友小程序-添加好友功能之创建并更新message信息

    1.首先要在 添加好友 这个按钮上添加一个事件,也就是在detail.wxml的添加好友这个按钮的哪里,添加一个点击事件 handleAddFriend 并且添加好友还要考虑,现在是已登陆状态还是未登 ...

  2. Day7-微信小程序实战-交友小程序首页UI

    一般都是直接用微信提供的组件来进行布局的 在小程序中最好少用id,尽量用class 轮播图就是直接用swiper 直接在微信开发者文档里面->组件->swiper->示例代码 < ...

  3. Day8-微信小程序实战-交友小程序-首页用户列表渲染及多账号调试及其点赞功能的实现

    在这之前已经把编辑个人的所有信息的功能已经完成了 之后先对首页的列表搞动态的,之前都是写死的静态 1.之前都是把好友写死的,现在就在js里面定义一个数组,用循环来动态的绑定 在onReady中定义,取 ...

  4. Day10-微信小程序实战-交友小程序-自定义callPhone 和copyText组件

    ---为了方便用户可以拨打电话和复制微信号(下面就要实现这样的两个功能) 注意:在小程序中是没办法直接的添加用户的微信的,所以就只能是复制微信号 (这种东西的话可以直接去做,也可以做成组件,做出组件的 ...

  5. Day11-微信小程序实战-交友小程序-附近的人(地图的形式)及位置获取

    回顾:在下面的tabbar中,我们已经实现了首页 消息 我的,就剩下”附近“页面了 ”附近“的页面主要是用地图来进行展示的(可以显示我的位置,也可以显示周围附近的人的位置) (在地图里面点击它的头像的 ...

  6. Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)

    回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...

  7. Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端

    要搞一个小型的cms内容发布系统 因为小程序上线之后,直接对数据库进行操作的话,慧出问题的,所以一般都会做一个管理系统,让工作人员通过这个管理系统来对这个数据库进行增删改查 微信小程序其实给我们提供了 ...

  8. Day10-微信小程序实战-交友小程序-实现删除好友信息与子父组件间通信

    回顾:上一次已经把消息的布局以及样式做好了 效果图: 在removeList.js文件中,messageId就是发起这个消息的用户了 先查看一下自定义组件的生命周期 https://developer ...

  9. python实现秒杀商品的微信自动提醒功能(附代码)

    技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的 ...

随机推荐

  1. windows下nodejs的安装

    1.下载 从nodejs官网下载地址:http://www.nodejs.org 2.安装 双击node-v4.4.0-x64.msi或者其他版本 3.环境搭建 进入cmd命令窗口 进入到nodejs ...

  2. burpsuite 关于部分https抓包失败原因

    没导入证书 burpsuite生成证书 der格式,名字随便取,一路next  firefox浏览器导入 导入,勾选信任证书ok,重启浏览器  还有你要勾选这里,确保所有流量都走你的代理 ps:遇到浏 ...

  3. Typora 使用 Markdown 嵌入 LaTeX 数学公式符号语法

    博客园不支持渲染 LaTeX 数学公式,需要用到什么公式,请复制到您所用的支持 LaTeX 的编辑器中查看实现效果.Typora 可以渲染 LaTeX 数学公式. 目录 行内与独行 行内公式 独行公式 ...

  4. Chisel3 - Tutorial - Adder4

    https://mp.weixin.qq.com/s/X5EStKor2DU0-vS_wIO-fg   四位加法器.通过FullAdder级联实现.   参考链接: https://github.co ...

  5. Python——day2

    学完今天我保证你自己可以至少写50行代码 明天,还在等你 回顾day1 小练习1: 小练习2: 小练习3: 好了激情的的一天已经过去了正式开始,day2的讲解         Day2 目录: 格式化 ...

  6. Redis 的原理与应用场景及数据库关系

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一. Redis 是什么? Redis是一个开源的使用ANSIC语言编写.支持网络.单进程单线程.可基于 ...

  7. link和@import引入css的区别

    @import是在CSS2.1提出的,低版本的浏览器不支持.link支持良好: link引用CSS时,在页面载入时同时加载: @import需要页面网页完全载入以后加载.如果页面内容过多,会产生不好的 ...

  8. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  9. Java实现 洛谷 采药

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  10. Java实现 蓝桥杯VIP 算法训练 判定数字

    算法训练 判定数字 时间限制:1.0s 内存限制:512.0MB 编写函数,判断某个给定字符是否为数字. 样例输入 9 样例输出 yes import java.util.Scanner; publi ...