微信小程序基于本地缓存实现点赞功能的方法


Posted in Javascript onDecember 18, 2017

本文实例讲述了微信小程序基于本地缓存实现点赞功能的方法。分享给大家供大家参考,具体如下:

wxml中的写法

注意:

1. 使用wx:if="{{condition}}" wx:else实现图标的切换效果;
2. 为图片绑定点击事件bindtap="toCollect",两个image标签都要绑定!

<image wx:if="{{collection}}" src="/images/icon/pic1.png" bindtap="toCollect"></image>
<image wx:else src="/images/icon/pic2.png" bindtap="toCollect"></image>

js中的写法:

Page({
 data: {
 },
 onLoad: function(option) {
  // 获取接收到的id值
  var getId = option.id;
  // 让接收到的id值传递到data:{}里面
  this.setData({
   currentId: getId
  });
  // 读取所有的文章列表点赞缓存状态
  var cache = wx.getStorageSync('cache_key');
  // 如果缓存状态存在
  if (cache) {
   // 拿到所有缓存状态中的1个
   var currentCache = cache[getId];
   // 把拿到的缓存状态中的1个赋值给data中的collection,如果当前文章没有缓存状态,currentCache 的值就是 false,如果当前文章的缓存存在,那么 currentCache 就是有值的,有值的说明 currentCache 的值是 true
   this.setData({
    collection: currentCache
   })
  } else {
   // 如果所有的缓存状态都不存在 就让不存在的缓存存在
   var cache = {};
   // 既然所有的缓存都不存在,那么当前这个文章点赞的缓存也不存在,我们可以把当前这个文章点赞的缓存值设置为 false
   cache[getId] = false;
   // 把设置的当前文章点赞放在整体的缓存中
   wx.setStorageSync('cache_key',cache);
  }
 },
 // 点击图片的点赞事件 这里使用的是同步的方式
 toCollect: function(event) {
  // 获取所有的缓存
  var cache = wx.getStorageSync('cache_key');
  // 获取当前文章是否被点赞的缓存
  var currentCache = cache[this.data.currentId];
  // 取反,点赞的变成未点赞 未点赞的变成点赞
  currentCache = !currentCache;
  // 更新cache中的对应的1个的缓存值,使其等于当前取反的缓存值
  cache[this.data.currentId] = currentCache;
  // 重新设置缓存
  wx.setStorageSync('cache_key',cache);
  // 更新数据绑定,从而切换图片
  this.setData({
   // collection 默认的是 false
   collection: currentCache
  });
  // 交互反馈
  wx.showToast({
   title: currentCache?'点赞':'取消',
   icon: 'success',
   duration: 2000
  });
 }
})

js中操作反馈—wx.showModal的写法:

// 点击图片的点赞事件 这里使用的是同步的方式
toCollect: function(event) {
  // 获取缓存,得到当前文章是否被点赞
  var cache = wx.getStorageSync('cache_key');
  // 获取当前文章是否被点赞的缓存
  var currentCache = cache[this.data.currentId];
  // 取反,点赞的变成未点赞 未点赞的变成点赞
  currentCache = !currentCache;
  // 更新cache中的对应的1个的缓存值,使其等于当前取反的缓存值
  cache[this.data.currentId] = currentCache;
  // 调用 showModal方法
  this.showModal(cache,currentCache);
},
showModal: function(cache,currentCache) {
 var that = this;
 wx.showModal({
  title: "点赞"
  content: currentCache?"要点赞吗?":"要取消赞吗?",
  showCancel: "true",
  cancelText: "取消",
  cancelColor: "#666",
  confirmText: "确定",
  confirmColor: "#222",
  success: function(res) {
   if (res.confirm) {
    // 重新设置缓存
    wx.setStorageSync('cache_key',cache);
    // 更新数据绑定,从而切换图片
    that.setData({
     collection: currentCache
    })
   }
  }
 })
}

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
XENON基于JSON变种
Jul 27 Javascript
jQuery数组处理方法汇总
Jun 20 Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 Javascript
PHP结合jQuery实现的评论顶、踩功能
Jul 22 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
Angular实现的进度条功能示例
Feb 18 Javascript
使用layer模态框给新页面传值的方法
Sep 27 Javascript
vue登录以及权限验证相关的实现
Oct 25 Javascript
react项目从新建到部署的实现示例
Feb 19 Javascript
JavaScript模块详解
Dec 18 #Javascript
webpack打包js文件及部署的实现方法
Dec 18 #Javascript
react+redux的升级版todoList的实现
Dec 18 #Javascript
总结js中的一些兼容性易错的问题
Dec 18 #Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 #Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 #jQuery
详解如何使用 vue-cli 开发多页应用
Dec 16 #Javascript
You might like
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
今天是星期几的4种JS代码写法
2013/09/17 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
Three.js基础部分学习
2017/01/08 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python绘制随机网络图形示例
2019/11/21 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
机电一体化专业应届本科生求职信
2013/09/27 职场文书
计算机个人求职信范例
2014/01/24 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
升职感谢信
2015/01/22 职场文书
毕业感言怎么写
2015/07/31 职场文书