位置: 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)

  • 苹果笔记本怎么关机(苹果笔记本怎么录屏)

    苹果笔记本怎么关机(苹果笔记本怎么录屏)

  • 建行转账记录怎么删除(建行转账记录怎么打印)

    建行转账记录怎么删除(建行转账记录怎么打印)

  • 苹果手机界面变黑色如何改成白色(苹果手机界面变成搜索怎么办)

    苹果手机界面变黑色如何改成白色(苹果手机界面变成搜索怎么办)

  • 京东卡能查到使用人吗(京东卡能否查到哪个账号使用了)

    京东卡能查到使用人吗(京东卡能否查到哪个账号使用了)

  • 微信禁言的原因(微信禁言的原因怎么解除)

    微信禁言的原因(微信禁言的原因怎么解除)

  • 有线网络传输线路有哪些(有线传输的优点和缺点)

    有线网络传输线路有哪些(有线传输的优点和缺点)

  • 手机wps怎么制作封面(手机wps怎么制作文档)

    手机wps怎么制作封面(手机wps怎么制作文档)

  • 抖音多少粉丝可以挂小黄车(抖音多少粉丝可以放小黄车)

    抖音多少粉丝可以挂小黄车(抖音多少粉丝可以放小黄车)

  • 麦克风没问题siri用不了(麦克风没问题CSGO说不了话)

    麦克风没问题siri用不了(麦克风没问题CSGO说不了话)

  • 优思版手机是什么意思(优思版手机能不能买)

    优思版手机是什么意思(优思版手机能不能买)

  • 6s和8屏幕一样大吗(iphone6s和8屏幕)

    6s和8屏幕一样大吗(iphone6s和8屏幕)

  • 手机怎么使用谷歌搜索(手机怎么使用谷歌地图)

    手机怎么使用谷歌搜索(手机怎么使用谷歌地图)

  • 手机搜狗关闭搜索候选(手机搜狗输入法关闭搜狗百科)

    手机搜狗关闭搜索候选(手机搜狗输入法关闭搜狗百科)

  • 抖音为什么实名认证不了(抖音为什么实名认证了,却显示未成年,不能充值)

    抖音为什么实名认证不了(抖音为什么实名认证了,却显示未成年,不能充值)

  • 照片无备份删了咋找回(照片无备份删了咋找回免费)

    照片无备份删了咋找回(照片无备份删了咋找回免费)

  • 如何做好网络安全防范(如何做好网络安全管理工作)

    如何做好网络安全防范(如何做好网络安全管理工作)

  • 电脑打印页面设置在哪(电脑打印页面设置怎么固定)

    电脑打印页面设置在哪(电脑打印页面设置怎么固定)

  • vivox27pro上市时间(vivox27pro发布价格)

    vivox27pro上市时间(vivox27pro发布价格)

  • 苹果手机灯光怎么闪硕(苹果手机灯光怎么设置)

    苹果手机灯光怎么闪硕(苹果手机灯光怎么设置)

  • word添加分割线怎么设置(word添加分割线条)

    word添加分割线怎么设置(word添加分割线条)

  • mac bootcamp怎么安装win10? bootcamp安装win10详细教程(bootcamp怎么直接安装)

    mac bootcamp怎么安装win10? bootcamp安装win10详细教程(bootcamp怎么直接安装)

  • [vue]提供一种网站底部备案号样式代码(只用vue可以做网站不?)

    [vue]提供一种网站底部备案号样式代码(只用vue可以做网站不?)

  • 计算机视觉—— 相机标定(计算机视觉未来发展方向)

    计算机视觉—— 相机标定(计算机视觉未来发展方向)

  • 应交税费借方余额0.01怎么调整
  • 企业所得税不得扣除的税金
  • 农副产品增值税免税政策
  • 出口港杂费是什么费用
  • 应交税费负数调整
  • 工程违约金收入如何入账
  • 收到某公司发票会计分录
  • 预付办公室装修款
  • 金三地税系统如何安装客户端插件?
  • 小规模纳税人交企业所得税吗
  • 什么情况下要交消费税
  • 分次付息会计分录
  • 固定资产折旧怎么做记账凭证
  • 借贷记账法的记账规则是
  • 有限合伙企业需要法人吗
  • 华为手机屏幕变成黑白色怎么恢复
  • 确认收入是收到款了吗
  • 结转收入怎么计算
  • 设备固定资产原值
  • 成本核算的一般步骤
  • RegSrvc.exe - RegSrvc是什么进程 有什么用
  • php大小写转换函数怎么写
  • php大量数据处理
  • 摊销房租费如何做账
  • 非货币性资产交换和债务重组的区别
  • uniapp vuecli
  • phpifelse
  • 增值税按简易计价方式
  • win11升级正式版
  • 怎么开通公众号微信公众平台
  • 车间使用的辅助材料
  • 金蝶科目明细表
  • yolo v1 pytorch源代码
  • 浅谈如何培养孩子的注意力
  • springboot+chatgpt+chatUI Pro开发智能聊天工具
  • opencv图像识别特定形状
  • umount命令详解
  • 蔬菜免税分录
  • 研发费用加计扣除新税收政策
  • 结转成本涉及的科目
  • php是什么
  • python PyQt5如何实现窗口功能
  • 有外币业务的银行
  • 交物业的发票有用吗
  • 还有什么服务啊
  • 个体工商户是否属于企业
  • 小规模纳税人免税政策2023年
  • 购进材料款项未付用什么凭证
  • 员工持股平台合伙企业
  • ukey要交服务费吗
  • 库存商品期末为负数
  • 如何计算政府补贴应摊销
  • 公司自己制造设备怎么办
  • 委托加工商品属于什么资产
  • 进项大于销项如何做分录
  • 利息与资金占用费
  • 会计人员必备的知识和技能
  • 冲减和冲销的会计分录
  • 企业在非同一控制下的企业合并
  • linux 查看numa
  • sql分几类
  • sqlserver清空所有表数据
  • 苹果15手机价格和图片颜色
  • xp系统怎么卸载程序
  • windows8介绍
  • linux中sed命令
  • 安卓开发过程中的问题
  • CSSvista可同时在IE和Fifrefox调试的CSS编辑提供下载
  • jquery validate表单校验html
  • 安卓手机管家是什么
  • android技术总结
  • javascript基础入门视频教程
  • 安卓回调接口怎么写
  • js中闭包
  • javascript教程完整版
  • 山东契税补贴政策2023年
  • 电子税务局个体工商户如何登陆
  • 如果我中了双色球
  • 拒绝税务机关检查
  • 中税网讲师
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设