位置: IT常识 - 正文

微信小程序云开发之收藏文章功能的简单实现(微信小程序云开发控制台)

编辑:rootadmin
微信小程序云开发之收藏文章功能的简单实现

推荐整理分享微信小程序云开发之收藏文章功能的简单实现(微信小程序云开发控制台),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微信小程序云开发和普通开发区别,微信小程序云开发打不开,微信小程序云开发项目,微信小程序云开发是后端吗,微信小程序云开发项目,微信小程序云开发收费标准,微信小程序云开发,微信小程序云开发控制台,内容如对您有帮助,希望把文章链接给更多的朋友!

最近宅宅也是在给人做一款文章小程序,其中需要实现用户收藏文章,然后能显示在收藏页面的功能,也是在网上找了不少其他博主的文章,但是都达不到我想要的效果(要么用了云函数,要么超出了我的知识范围,要么本身存在一些bug)

于是宅宅自己写了一份,代码有些简单,没啥高深的技术,大佬们多多担待。

文章页面

首先来看效果(页面凑活看,不喜欢的话待会儿自己写个)

 wxml代码

<view style="display: flex;flex-direction:column;justify-content: center;align-items: center;"> <image class = "image" src = "{{shouchangUrl1}}" bindtap="clickMe1"></image> <view>收藏</view></view>

 wxss代码

page{ background: #ffffff;}.image{ width: 100rpx; height: 100rpx;}

样式上都很简单,上面的可以做个参考,具体想实现什么效果,按自己的喜好来。

最重要的是下面的js代码,后面我会做一些解读,分享我在操作过程中遇到的一些问题

js代码

const db = wx.cloud.database()Page({ data: { id:'', show1:'', shouchangUrl1: "../../images/shou0.png ", xuhao:'', shoucang:[] }, onLoad: function (e) { this.setData({ _id:e.id }) var id = e.id; db.collection('note').doc(id).get().then(res => { console.log('获取到的收藏数组', res.data.shoucang) this.setData({ shoucang:res.data.shoucang }) wx.cloud.callFunction({ name: 'get', complete: res => { console.log('云函数获取到的openid: ', res.result.openId) var shoucang = this.data.shoucang; var dianzan = this.data.dianzan; var daka = this.data.daka; var openid = res.result.openId; if(shoucang.indexOf(openid)>-1){ this.setData({ shouchangUrl1: "../../images/shou1.png", show1:1 }) console.log('收藏存在') }else{ this.setData({ shouchangUrl1: "../../images/shou0.png", show1:0 }) console.log('收藏不存在') } } }) }) }, //收藏 clickMe1(){ if(this.data.show1==0){ wx.cloud.callFunction({ name: 'get', complete: res => { console.log('云函数获取到的openid: ', res.result.openId) var openid = res.result.openId; var xuhao= this.data._id var _ = db.command db.collection('note').doc(xuhao).update({ data: { shoucang: _.addToSet(openid) } }) } }) this.setData({ shouchangUrl1: "../../images/shou1.png", show1:1 }) }else{ wx.cloud.callFunction({ name: 'get', complete: res => { console.log('云函数获取到的openid: ', res.result.openId) var openid = res.result.openId; var xuhao= this.data._id var _ = db.command db.collection('note').doc(xuhao).update({ data: { shoucang: _.pull(openid) } }) } }) this.setData({ shouchangUrl1: "../../images/shou0.png", show1:0 }) }},})微信小程序云开发之收藏文章功能的简单实现(微信小程序云开发控制台)

实现上的原理很简单:首次加载时,从云开发数据库获取收藏数组,赋值到本地数组,然后通过get云函数获取当前用户的openid,通过indexOf判断收藏数组中是否存在当前用户的openid,有则显示已收藏赋值show为1,没有则显示未收藏赋值show为0。然后点击收藏按钮时候,通过if语句判断show,show为0,则向收藏数组中添加当前用户的openid(这里用的addToSet)否则删除指定收藏数组的openid(这里用的pull)

注意:由于上面的代码没有将openid赋值给变量,所以后面clickMe1又使用了get云函数,实际操作中可以将通过赋值变量省略此步骤(懒得改了,凑活看吧)

原理上了解了,但是实际上要考虑到代码运行的同步的问题,一开始的时候,我是将获取到openid和获取到收藏数组的方法是分开的,但是这样,可能出现你获取完收藏数组和data中的变量比对完了,但是openid才刚刚获取赋值给data变量的情况,这就导致对比数据不准确,一直为else的情况,最后采用了方法中的本来默认的异步执行解决了这个问题(当然也可以更改代码,通过promise来实现异步执行,但是我不太会。。。)

另外,起初的时候,我并没有打算通过本地对比数组,来确定当前用户是否收藏,而是使用微信文档给与的api,通过where去查询用户的openid是否存在shoucang数组,这样的话,一是更难处理方法同步的问题,二是使用where查询时遇到了一些关于字段类型的问题,懒得解决。在这里给大家说下,希望能给大家躲避一些坑。

收藏页面

文章收藏了怎么能没有收藏页面呢,下面是收藏页面的图片,页面简单,不喜欢可以自己改个哈

收藏页面的实现还是很简单的,条件查询就可以了,下面是代码:

wxml代码

<view class="cu-list menu"> <view style="margin: 15rpx 0rpx;" class="cu-item " wx:for="{{shou}}" wx:key="index" bindtap="note" data-id="{{item._id}}" data-type="{{item.type}}"> <view style="display: flex;align-items: center;justify-content: space-around;"> <view style="width: 550rpx;" class="content padding-tb-sm"> <view class="K_between"> <text class="text-cut k_width">{{item.title ? item.title : '无标题'}}</text> <!--<text catchtap class="cuIcon-moreandroid" bindtap="mores" data-id="{{item._id}}" data-text="{{item.text}}"></text>--> </view> <view class="text-gray text-sm text-cut k_width"> {{item.text}} </view> </view> </view> </view> </view>

 wxss代码

.K_between{ display:flex; justify-content:space-between }.k_width{ width:700rpx;}

js代码

// pages/shoucang/shoucang.jsconst db = wx.cloud.database()Page({ /** * 页面的初始数据 */ data: { title:'', shou:[] }, /** * 生命周期函数--监听页面加载 */ onLoad() { wx.cloud.callFunction({ name: 'get', complete: res => { console.log('云函数获取到的openid: ', res.result.openId) var openid = res.result.openId; db.collection('note').where({ shoucang: openid }).get({ success: res =>{ console.log(res.data[0]); this.setData({ shou:res.data }) } }) }}) }, note: function (e) { wx.navigateTo({ url: '../notexianshi/note?id=' + e.currentTarget.dataset.id })},})

代码还是很简单的,关键在于查询发法,但是!!!!

要注意,有一部分是我懒的简单,这个代码实际使用中最多能显示20条,至于原因,不知道的可以查一下微信文档,如果对数目没有要求的可以使用这一小段代码,需要全部显示的,可以参考一下skip的分页用法。

好了,文章就分享到这啦,最后看一下效果吧

本文链接地址:https://www.jiuchutong.com/zhishi/297387.html 转载请保留说明!

上一篇:Win11开机界面点登录无反应怎么回事?Win11开机点登录无反应解决方法(win11开机后开始菜单没反应)

下一篇:使用python中的pymrmr模块来进行特征提取,深入学习mRMR(最大相关最小冗余准则)(python pymongo)

  • 如何使用搜狗输入法文字扫描功能(如何使用搜狗输入法夸人)

    如何使用搜狗输入法文字扫描功能(如何使用搜狗输入法夸人)

  • 华为nova5i支持otg吗(华为nova5i支持快充吗)

    华为nova5i支持otg吗(华为nova5i支持快充吗)

  • 二次改微信号怎么改(微信号第二次修改)

    二次改微信号怎么改(微信号第二次修改)

  • 手机号抵消是什么意思(手机号抵消啥意思)

    手机号抵消是什么意思(手机号抵消啥意思)

  • windows7属于什么操作系统(Windows7属于什么)

    windows7属于什么操作系统(Windows7属于什么)

  • vnp的定义?什么是vnp(vnp全称)

    vnp的定义?什么是vnp(vnp全称)

  • 仅限紧急呼叫是卡坏了吗(仅限紧急呼叫是欠费了还是注销了)

    仅限紧急呼叫是卡坏了吗(仅限紧急呼叫是欠费了还是注销了)

  • 手机能测量长度吗(手机能测量长度面积的软件收费吗?)

    手机能测量长度吗(手机能测量长度面积的软件收费吗?)

  • 光猫电源灯不亮了怎么回事(电信光猫电源灯不亮)

    光猫电源灯不亮了怎么回事(电信光猫电源灯不亮)

  • 唯品会七天无理由退货是哪七天(唯品会七天无理由)

    唯品会七天无理由退货是哪七天(唯品会七天无理由)

  • 原彩显示费电吗(原彩显示 耗电吗)

    原彩显示费电吗(原彩显示 耗电吗)

  • oppor9s带不带nfc功能(oppor9s带不带红外线功能)

    oppor9s带不带nfc功能(oppor9s带不带红外线功能)

  • ps怎么把人p成光头(ps怎么把人物变成黑白光影)

    ps怎么把人p成光头(ps怎么把人物变成黑白光影)

  • 华为mate30pro5g可以用4g卡吗(华为mate30Pro5G可以卖多少钱)

    华为mate30pro5g可以用4g卡吗(华为mate30Pro5G可以卖多少钱)

  • 苹果手机怎么设置铃声(苹果手机怎么设置自己喜欢的铃声)

    苹果手机怎么设置铃声(苹果手机怎么设置自己喜欢的铃声)

  • 华为mate305G版怎么分屏(华为mate305G版怎么样)

    华为mate305G版怎么分屏(华为mate305G版怎么样)

  • 华为mate30pro自带收音机吗(华为mate30pro自带膜)

    华为mate30pro自带收音机吗(华为mate30pro自带膜)

  • iPhone11pro怎么关闭siri应用建议(iphone11pro怎么关机开机)

    iPhone11pro怎么关闭siri应用建议(iphone11pro怎么关机开机)

  • 淘宝帮买消息是什么意思啊(淘宝帮买消息是真的吗)

    淘宝帮买消息是什么意思啊(淘宝帮买消息是真的吗)

  • oppo手机怎么开机(oppo手机怎么开小窗)

    oppo手机怎么开机(oppo手机怎么开小窗)

  • vivo手机远程管理在哪(vivo手机远程管理开关在哪里)

    vivo手机远程管理在哪(vivo手机远程管理开关在哪里)

  • 趣步怎么不显示步数呢(趣步怎么不走步呢)

    趣步怎么不显示步数呢(趣步怎么不走步呢)

  • ppt撤销快捷键是什么(ppt撤销键不管用)

    ppt撤销快捷键是什么(ppt撤销键不管用)

  • 西瓜视频怎么取消关注(西瓜视频怎么取名字才能吸引人?)

    西瓜视频怎么取消关注(西瓜视频怎么取名字才能吸引人?)

  • 织梦怎么取消后台登录的验证码(织梦如何使用不侵权)

    织梦怎么取消后台登录的验证码(织梦如何使用不侵权)

  • 织梦模板DEDECMS自定义表单限制同一IP提交次数(织梦模板安装完整教程)

    织梦模板DEDECMS自定义表单限制同一IP提交次数(织梦模板安装完整教程)

  • 进货增值税税率
  • 缴纳增值税的会计科目
  • 季中转一般纳税人申报步骤
  • 应收款和应付款对抵
  • 资产负债表里面的应收账款怎么算
  • 没有车加油费可以入账吗
  • 专票手工认证
  • 监理费可以由施工方出吗
  • 可供出售资产减值损失
  • 购进客房用品取得增值税专用发票注明税额9120
  • 其他业务收入的核算内容
  • 一般存款账户可以办理现金缴存
  • 企业如果亏损应该计提缴纳所得税吗
  • 递延所得税费用为负数是什么意思
  • 普通征税差额征税减按征税
  • 简易计税的劳务公司员工社保可以抵扣增值税吗
  • 研发人员奖金的会计分录
  • 卷烟消费税税率表
  • 对方开增值税普通发票,我方需要做什么呢?
  • 外币出资汇率变动会计处理
  • 买入返售金融资产是资产还是负债
  • 招待客户产生的住宿费
  • 以公允价值计量是什么意思
  • 遗属补助是死亡当月发放还是次月发放
  • 在建工程变更建设单位
  • 旅游费用账务处理
  • windows10自带桌面时钟
  • win10锁屏壁纸自动更新
  • 12315投诉饿了吗有用吗
  • 电脑legacy是什么意思
  • 天猫魔搭
  • php use function
  • 蜜蜂皇vs
  • 小企业会计制度最新版
  • framework core
  • 常见浏览器兼容软件
  • python stream模块
  • vue生命周期分别做了什么
  • 达摩院 2021
  • 基于opencv的人脸检测算法
  • openeuler基于
  • ipcrm命令
  • 企业所得税如何计算应纳税所得额
  • 预提管理费用怎么计算
  • 文章初审过了
  • 请问如何在
  • 节日购买什么礼物发放职工
  • powerdesigner12.5使用教程
  • 无偿受赠房屋 交个人所得税嘛
  • 同花顺电脑版怎么看财务报表
  • 产品成本包括哪些
  • 通过SQL Server 2008数据库复制实现数据库同步备份
  • 小规模差额征税是什么意思
  • 专票认证之后怎么做账
  • 电子承兑汇票是银行承兑汇票吗
  • 一次性加速折旧额怎么算
  • 坏账准备的核销的分录怎么做
  • 其他业务收入如何填写申报表
  • 境外劳务输出收费表标准
  • 房屋租赁费可以抵扣吗
  • 原始凭证错误的更正方法
  • 在建工程预付款怎么做账
  • 红字发票开出的单价可以比蓝字发票高吗?
  • 5分钟了解环保币gec
  • windows内存诊断是干什么的
  • win7支持net.framework4.7.2
  • linux系统之间的区别
  • win8关闭开机启动项
  • macbook os x
  • 备份ubuntu系统
  • 10个常用linux指令
  • angularjs1.5
  • c#中init
  • android 系统app开机自启动设置
  • 河南省低保信息查询
  • 烟草局收入怎么样
  • 扬州税务学院住宿环境
  • 跨境电商上什么货源好
  • 交强险是什么样的照片
  • 企业完税证明怎么查询真伪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设