微信小程序云开发-数据库和云函数的应用-点赞/收藏/评论功能
一、准备工作
1、创建数据库表articles,字段分别为:
| 序号 | 字段名称 | 字段类型 | 字段值 | 字段描述 | 备注说明 |
| 1 | title | string | "标题1" | 文章标题 | |
| 2 | description | string | "描述1" | 文章描述 | |
| 3 | content | string | "进入迎峰度夏,受华东、华中、华南持续大范围高温天气影响,全国发用电量持续攀升。记者从国家发展改革委了解到,7月14日全国发电量达271.87亿千瓦时,创历史新高... | 文章内容 | |
| 4 | like | boolean | false | 点赞 | |
| 5 | collect | boolean | false | 收藏 | |
| 6 | remark | array | [{name:"陈世卿",content:"第1条评论"},{name:"王海云",content:"第2条评论"},{name:"马云海",content:"第3条评论"}] | 评论 | 数组里面存储对象 |
2、向数据库表中导入数据

二、新建文章列表页
新建文章列表页,取名为articlesList。

1、articlesList.wxml
<!--pages/articlesList/articlesList.wxml-->
<block class="articlesList" wx:for="{{articleList}}" wx:key="index">
<view class="articleItem" bindtap="goArticleDetail" data-id ="{{item._id}}">
<view>文章描述:{{item.title}}</view>
<view>文章描述:{{item.description}}</view>
</view>
</block>
2、articlesList.wxss
.articleItem{
height: 120rpx;
border-bottom: 1rpx solid #c3c3c3;
margin: 15rpx;
}
3、articlesList.js
// pages/articlesList/articlesList.js
Page({ //页面的初始数据
data: {
articleList:[]
}, //页面加载
onLoad: function (options) {
wx.cloud.database().collection("articles").get()
.then(res=>{
console.log("查询成功",res);
this.setData({
articleList:res.data
})
})
.catch(err=>{
console.log("查询失败",err);
})
}, //携带id跳转到文章内容详情页
goArticleDetail(e){
console.log("点击列表数据进入详情页面",e);
wx.navigateTo({
url: '/pages/articleDetail/articleDetail?id='+e.currentTarget.dataset.id,
})
} })
三、新建文章详情页
新建文章详情页,取名为articleDetail。

1、articleDetail.wxml
<!-- 文章内容详情 -->
<block class="title">
<!-- 文章标题、描述、内容 -->
<view><text class="left">文章标题</text><text class="right">{{articleDetail.title}}</text></view>
<view><text class="left">文章描述</text><text class="right">{{articleDetail.description}}</text></view>
<view><text class="left">文章内容</text><text class="right mm">{{articleDetail.content}}</text></view>
</block> <!-- 点赞 收藏-->
<view class="likeandcollect">
<image class="img" src="{{CollectImgUrl}}" bindtap="collect"></image>
<image class="img" src="{{likeImgUrl}}" bindtap="like"></image>
</view> <!-- 发表评论 -->
<block>
<view class="left">发表评论</view>
<textarea bindinput="getContent" placeholder="发表一下你的评论吧" value="{{content}}"></textarea>
<button bindtap="remark" type="primary">发表评论</button>
</block> <!-- 评论列表 -->
<block class="remarksList">
<view class="left">评论列表</view>
<view wx:for="{{remarks}}" wx:key="index" class="remarks">
<view class="name">{{item.name}}</view>
<view class="name">{{time}}</view>
<view class="content">{{item.content}}</view>
</view>
</block>
2、articleDetail.wxss
.likeandcollect{
margin: 20rpx;
}
.img{
width: 60rpx;
height: 60rpx;
margin-right: 20rpx;
}
.title{
margin: 20rpx;
}
.left{
text-align: left;
margin-left: 20rpx;
}
.right{
text-align: right;
color: gray;
margin: 20rpx;
}
.remarksList{
margin-top: 200rpx;
}
.remarks{
text-align: left;
margin: 20rpx;
border-bottom: 2rpx solid #c3c3c3;
padding: 20rpx;
}
.name{
color: gray;
margin-bottom: 20rpx;
}
.content{
/*在textarea中设置输入内容的自动换行*/
word-wrap:break-word;
}
textarea{
width: auto;
height: 200rpx;
border: 1rpx solid #c3c3c3;
margin: 20rpx;
word-break:break-all;
}
3、articleDetail.js
//设置点赞和收藏状态 默认为false
let like = false
let collect = false
//定义全局id
let id= ''
//定义content变量存放输入的评论内容
let content = '' //获取当前时间
var util = require("../../utils/util") Page({
//初始化数据显示
data:{
CollectImgUrl:"../../images/收藏no.png",
likeImgUrl:"../../images/点赞no.png",
//自定义变量,存储详情信息
articleDetail:[],
//自定义数组,用来存储并显示评论内容
remarks:[]
}, //页面加载
onLoad(options){
console.log("获取到的id",options);
id = options.id
wx.cloud.database().collection("articles")
.doc(id)
.get()
.then(res=>{
console.log("获取文章内容详情成功",res);
like = res.data.like
collect = res.data.collect
//如果评论不为空,则将res.data.remarks赋值给remarks变量
this.setData({
articleDetail:res.data,
likeImgUrl: like?"../../images/点赞yes.png":"../../images/点赞no.png",
CollectImgUrl: collect?"../../images/收藏yes.png":"../../images/收藏no.png",
remarks:res.data.remarks
})
})
.catch(err=>{
console.log("获取文章内容详情失败",err);
}) //获取当前时间
// 调用函数时,传入new Date()参数,返回值是日期和时间
var TIME = util.formatTime(new Date());
this.setData({
time: TIME,
}); }, //收藏功能
collect(){
//使用三元运算符实现收藏图标切换功能(推荐使用)
this.setData({
CollectImgUrl: collect?"../../images/收藏no.png":"../../images/收藏yes.png",
})
collect=!collect
//调用云函数来更新收藏状态到数据库
wx.cloud.callFunction({
name:"updateState", //云函数名称
data:{ //云函数参数传递
action:"collect", //action是在云函数内自定义的参数,用于区分点赞/收藏
id :id,
collect:collect
}
})
.then(res=>{
console.log("收藏状态改变成功",res);
if(collect==true){ //如果收藏,提示
wx.showToast({
title: '收藏成功',
icon:"success",
duration:1000
})}else if(collect ==false){ //如果取消收藏,提示
wx.showToast({
title: '取消收藏',
icon:"none",
duration:1000
})
}
})
.catch(err=>{
console.log("收藏状态改变失败",err);
})
}, //点赞功能
like(){
//使用三元运算符实现点赞图标切换功能(推荐使用)
this.setData({
likeImgUrl: like?"../../images/点赞no.png":"../../images/点赞yes.png",
})
like=!like,
//调用云函数来更新点赞状态到数据库
wx.cloud.callFunction({
name:"updateState",
data:{
action:"like",
id :id,
like:like
}
})
.then(res=>{
console.log("点赞状态改变成功",res);
if(like==true){ //如果点赞,提示
wx.showToast({
title: '点赞成功',
icon:"success",
duration:1000
})}else if(like ==false){ //如果取消点赞,提示
wx.showToast({
title: '取消点赞',
icon:"none",
duration:1000
})
}
})
.catch(err=>{
console.log("点赞状态改变失败",err);
})
}, //获取用户输入的评论内容
getContent(e){
content = e.detail.value
//动态绑定数据,实现评论结束后清空content的内容
this.setData({
content :e.detail.value
})
}, //发表评论
remark(e){
//如果评论长度小于4给予提示
if(content.length<4){
wx.showToast({
title: '评论内容太少',
icon:"none"
})
return
}
//定义remarksItem变量来存储插入的对象
let remarksItem = {}
remarksItem.name = "Monica"
remarksItem.content = content //remarks存储更新后的数组,
let remarks = this.data.remarks
remarks.unshift(remarksItem) //将对象插入到数组中。unshift插入到数组最前面,push插入到数组最后面
console.log("添加评论后的数组",remarks); //调用云函数之前显示加载中
wx.showLoading({
title: '发表中',
}) //调用云函数来更新评论数据到数据库
wx.cloud.callFunction({
name:"updateState",
data:{
action:"remark",
id :id,
remarks:remarks //将新数组remarks传递给数据库的remarks字段
}
})
.then(res=>{
console.log("发表评论成功",res);
//提示成功
wx.showToast({
title: '发表评论成功',
icon:"success",
duration:2000
})
//实现动态刷新页面
this.setData({
remarks:remarks, //发表成功后,动态刷新评论列表
content:"" //发表成功后,清空input内容
})
//隐藏加载提示
wx.hideLoading()
})
.catch(err=>{
console.log("发表评论失败",err);
//隐藏加载提示
wx.hideLoading()
})
}
})
四、创建云函数
创建云函数updateState,用来更新点赞状态、收藏状态、评论数据到数据库。
// 云函数入口函数
exports.main = async (event, context) => {
if(event.action =="like"){ //如果是点赞
return cloud.database().collection("articles")
.doc(event.id)
.update({
data:{
like:event.like
}
})
}else if(event.action =="collect"){ //如果是评论
return cloud.database().collection("articles")
.doc(event.id)
.update({
data:{
collect:event.collect
}
})
}else if(event.action =="remark"){ //如果是收藏
return cloud.database().collection("articles")
.doc(event.id)
.update({
data:{
remarks:event.remarks
}
})
}

五、最终效果

微信小程序云开发-数据库和云函数的应用-点赞/收藏/评论功能的更多相关文章
- 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买
作者图书京东链接,请点击------>>> **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...
- 小程序语音红包开发中 汉字转拼音的问题 微信小程序红包开发遇到的坑
公司最近在开发微信小程序的红包功能,语音红包需要用到文字转拼音的功能. 之前介绍过怎么将中文的汉字转为拼音的,具体看下面这篇文章. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信 ...
- Django微信小程序后台开发教程
本文链接:https://blog.csdn.net/qq_43467898/article/details/83187698Django微信小程序后台开发教程1 申请小程序,创建hello worl ...
- vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录
一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...
- 微信小程序快速开发
微信小程序快速开发 一.注册小程序账号,下载IDE 1.官网注册https://mp.weixin.qq.com/,并下载IDE. 2.官方文档一向都是最好的学习资料. 注意:1)注册账号之后会有一个 ...
- 微信小程序如何开发制作
微信小程序如何开发制作 微容SMO是一款微信小程序的免费在线制作工具,用户在微容平台上无需编辑代码,可通过拖拽式操作即可完成小程序的制作,真正意义上实现了小程序零代码免费制作! 消除技术门槛:无需代码 ...
- 【推荐】开源项目minapp-重新定义微信小程序的开发
minapp 重新定义微信小程序的开发 官网:https://qiu8310.github.io/minapp/ 作者:Mora minapp 重新定义微信小程序的开发 使用 用 npm 安装命令行工 ...
- 微信小程序快速开发上手
微信小程序快速开发上手 介绍: 从实战开发角度,完整系统地介绍了小程序的开发环境.小程序的结构.小程序的组件与小程序的API,并提供了多个开发实例帮助读者快速掌握小程序的开发技能,并能自己动手开发出小 ...
- 微信小程序wepy开发循环wx:for需要注意
微信小程序wepy开发循环wx:for需要注意 item index值必须在wx:for之后使用 <view wx:for="{{tablist}}" class=" ...
随机推荐
- NVIDIA空中导航SDK改造5G通信
NVIDIA空中导航SDK改造5G通信 Transforming Next-Generation Wireless with 5T for 5G and the NVIDIA Aerial SDK N ...
- Excel创建序列号1000个
一.输入1,并且选择 二.开始-填充 三.选择序列 四.选择列-等差序列-步张值输入1 终止值输入1000 点击确定 五.查看结果,选中这一列 六.快捷键 Ctrl+下键 则跳转到最下方,上键则是最上 ...
- c语言经典算法---计算Fibonacci数列
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.下面我就分享一个C语言中比较基础却极为重要的一个算法----计算Fi ...
- NX二次开发-曲线或边分析函数
UF_EVAL_is_arc 判断是圆形曲线或边UF_EVAL_ask_arc 圆形曲线或边分析,得到曲线或边的信息 类似的函数还有以下这些: UF_EVAL_is_ellipse // 椭圆UF ...
- 【VBA】读取配置文件存入字典型变量中
配置文件: 源码: Dim Co As Object '设为全局变量 Function 读取cfg() As Boolean Dim strcfg As String strcfg = " ...
- 惊呆了,Spring Boot居然这么耗内存!
Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起.如 ...
- 一款基于SpringBoot+SpringSecurity的后台管理系统,强烈推荐
简介 Base Admin一套简单通用的后台管理系统,主要功能有:权限管理.菜单管理.用户管理,系统设置.实时日志,API加密,以及登录用户修改密码.配置个性菜单等. 技术栈 前端:Layui 后端: ...
- 『无为则无心』Python基础 — 6、Python的注释
目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...
- 关于DWG文件转换成PDF
最近有这样一个需求,客户会提供DWG文件,因为DWG文件是不能直接在网页上显示的,所以必须对他做处理,要求是转换成PDF格式.我查了很久的资料,很多都是基于C#和.NET的方法,而且都是说的很模糊,不 ...
- 性能工具之linux常见日志统计分析命令
引言 我前几天写过的性能工具之linux三剑客awk.grep.sed详解,我们已经详细介绍 linux 三剑客的基本使用,接下来我们看看具体在性能测试领域的运用,本文主要介绍的是在 Tomcat 和 ...