Day10-微信小程序实战-交友小程序-创建friendList字段实现好友关系(添加好友功能)--内附代码
回顾:之前我们进行了删除的功能,以及对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字段实现好友关系(添加好友功能)--内附代码的更多相关文章
- Day10-微信小程序实战-交友小程序-添加好友功能之创建并更新message信息
1.首先要在 添加好友 这个按钮上添加一个事件,也就是在detail.wxml的添加好友这个按钮的哪里,添加一个点击事件 handleAddFriend 并且添加好友还要考虑,现在是已登陆状态还是未登 ...
- Day7-微信小程序实战-交友小程序首页UI
一般都是直接用微信提供的组件来进行布局的 在小程序中最好少用id,尽量用class 轮播图就是直接用swiper 直接在微信开发者文档里面->组件->swiper->示例代码 < ...
- Day8-微信小程序实战-交友小程序-首页用户列表渲染及多账号调试及其点赞功能的实现
在这之前已经把编辑个人的所有信息的功能已经完成了 之后先对首页的列表搞动态的,之前都是写死的静态 1.之前都是把好友写死的,现在就在js里面定义一个数组,用循环来动态的绑定 在onReady中定义,取 ...
- Day10-微信小程序实战-交友小程序-自定义callPhone 和copyText组件
---为了方便用户可以拨打电话和复制微信号(下面就要实现这样的两个功能) 注意:在小程序中是没办法直接的添加用户的微信的,所以就只能是复制微信号 (这种东西的话可以直接去做,也可以做成组件,做出组件的 ...
- Day11-微信小程序实战-交友小程序-附近的人(地图的形式)及位置获取
回顾:在下面的tabbar中,我们已经实现了首页 消息 我的,就剩下”附近“页面了 ”附近“的页面主要是用地图来进行展示的(可以显示我的位置,也可以显示周围附近的人的位置) (在地图里面点击它的头像的 ...
- Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)
回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...
- Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端
要搞一个小型的cms内容发布系统 因为小程序上线之后,直接对数据库进行操作的话,慧出问题的,所以一般都会做一个管理系统,让工作人员通过这个管理系统来对这个数据库进行增删改查 微信小程序其实给我们提供了 ...
- Day10-微信小程序实战-交友小程序-实现删除好友信息与子父组件间通信
回顾:上一次已经把消息的布局以及样式做好了 效果图: 在removeList.js文件中,messageId就是发起这个消息的用户了 先查看一下自定义组件的生命周期 https://developer ...
- python实现秒杀商品的微信自动提醒功能(附代码)
技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的 ...
随机推荐
- JS代码静态分析及挖掘
JavaScript 已经成为现代 Web 浏览器开发中最普遍的技术之一.使用客户端 JavaScript 框架(如 AngularJS,ReactJS 和 Vue.js)构建的应用程序已向前端输送了 ...
- background-color的覆盖范围
1. 一般div的background-color覆盖范围 到 border,margin的颜色由外层元素决定 2. body的background-color覆盖范围 到 margin,但 当htm ...
- SchedTune
本文仅是对kernel中的document进行翻译,便于理解.后续再添加代码分析. 1. 为何引入schedtune? schedutil是一个基于利用率驱动的cpu频率governor.它允许调度器 ...
- Java实现 LeetCode 749 隔离病毒(DFS嵌套)
749. 隔离病毒 病毒扩散得很快,现在你的任务是尽可能地通过安装防火墙来隔离病毒. 假设世界由二维矩阵组成,0 表示该区域未感染病毒,而 1 表示该区域已感染病毒.可以在任意 2 个四方向相邻单元之 ...
- Java实现 LeetCode 516 最长回文子序列
516. 最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 ...
- Java中lang包的常用方法介绍
JAVA API(图片来源:实验楼) 包装类 Integer包装类 方法 返回值 功能描述 byteValue() byte 以 byte 类型返回该 Integer 的值 intValue() in ...
- 阿里云专有网络配置以及交换机配置+ip、子网掩码、ip网段计算原理讲解
在阿里云上购买ECS或者其他服务,如redis.polardb时,需要配置专有网络,阿里的文档写的总体上还是比较抽象的,没有一定的网络基础,会一脸懵. 所以这里我来进行专有网络和交换机的配置,以及ip ...
- 涨见识了,在终端执行 Python 代码的 6 种方式!
原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...
- python自学Day04(自学书籍python编程从入门到实践)
第5章 if 语句 5.1 一个简单的示例 使用前面的解析列表构建一个0-9的数值列表. 判断0是否在列表中,如果在输出 0在列表A中 A = [i for i in range(0,10)] if ...
- 温故知新-快速理解Linux网络I/O
文章目录 摘要 阻塞.非阻塞.同步.异步 Linux下的I/O模型 阻塞I/O模型 非阻塞I/O模型 I/O复用模型 select poll epoll 信号驱动I/O模型 异步I/O 参考 你的鼓励 ...