微信小程序实现列表页和详情页同步收藏

第一次写博客耶~不太会搞,记录一下这两天搞定的需求,原本想放弃了来着,结果做到了开心啊转圈圈吼吼吼

需求

这是毕业设计的项目,使用微信小程序,首页分类展示兼职列表,也有分页的,每个兼职在首页有收藏按钮,在详情页也可以收藏,希望做到这两个收藏按钮可以同步操作和表现收藏状态。

bug层出不穷233333

首页列表里点击按钮,虽然可以绑定这个兼职的id,可是不知道怎么做更改状态,想着首页干脆仅做状态展示好了,在详情页操作收藏,这样回到列表却没有实时更新状态呀!
这里我把根据页码请求列表的方法放在onLoad里的,每次回到首页不会再次请求,自然不会更新状态,然后我把请求放在onShow里,可是这样每次到首页就会退到第一页的数据,用户体验贼差,而且每次回到这一页还会触发onReachBottom方法,让人很不舒服,总不能让人一次次到首页一次次刷新看收藏状态吧,也想过使用缓存把兼职列表存下来,可是这样和onLoad没差,而且查了一下小程序缓存最多10M,肯定不可行,主要还是想让首页的展示丝滑些(那列表请求就得放在onLoad里)。
一度想放弃,首页干脆也不展示收藏状态好了,可是少了收藏按钮总觉得光秃秃的,和我的设计图出入太大了,强迫症表示很难受有个梗不想继续敲代码了

解决撒花

百度了很多可是好像没有和我一样的需求,这篇文章启发我辣,nice
解决方法核心就是利用setData进行列表局部刷新,词不达意,代码贴上

列表页收藏按钮实现局部更新数据

这里页面展示要绑定一个独特ID

<!---index.wxml--->
<view class="isStore" catchtap="toStore" data-id="{{joblist.id}}"><van-icon wx:if="{{joblist.store}}" name="star" color="#99ccff" size="46rpx" /><van-icon wx:else name="star-o" color="#99ccff" size="46rpx" />
</view>

js里点击收藏按钮的方法

<!---index.js--->
toStore: function(e){console.log('tostore',e)const openId = wx.getStorageSync('token') || '';const that = this// 操作收藏需要用户授权if(openId){//页面绑定的id在这里const jobId = e.currentTarget.dataset.idconst jobslist = that.data.jobslistfor (let i in jobslist){// 遍历兼职列表根据id定位点击的兼职,通过id请求操作收藏的方法if (jobId == jobslist[i].id) {console.log("id1", jobId)call.requestGet('jus/goStore', {openId: openId,id: jobId}, function (e) {// 请求成功,用这个id定位列表中的那个兼职并更改它的状态for (let i in jobslist) {if (jobId == jobslist[i].id) {console.log("id2", jobId)// 核心就在这里啦!!!!!(列表局部更改数据要这样拼接,很有用,记住啦~)取反这个数据就好了that.setData({["jobslist[" + i + "].store"]: !that.data.jobslist[i].store})return}}}, function () {});return}}} else {// 去授权页wx.navigateTo({url: '../authPage/authPage'})}},
详情页收藏按钮实现更新数据
<!---jobDetail.js--->onLoad: function (options) {console.log(options)this.setData({jobId: options.jobId})// 进入详情页会将带来id的缓存,再次回到列表页读取这个缓存wx.setStorageSync('jobId', options.jobId);},
<!---index.js--->
onShow: function () {const openId = wx.getStorageSync('token');const jobId = wx.getStorageSync('jobId');const that = thisconst jobslist = this.data.jobslist// 进入详情页会埋下一个所访问的兼职id种子,回到首页,如果有这个id就会发起请求,更新此兼职的状态if(openId && jobId){call.requestGet('jus/findOne', {openId: openId,id: jobId}, function (e) {console.log('jobDetail', e)for (let i in jobslist) {if (jobId == jobslist[i].id) {console.log("id2",jobId)// 核心在这里啦!!!!!这里要获取这个兼职的状态,因为进入详情页不一定会操作收藏按钮that.setData({["jobslist[" + i + "].store"]: e.store})return}}wx.removeStorageSync('jobId')}, function () {});}},

Last but not least

前端小白一枚,这只是我捣鼓出来的方法,总觉得循环又循环有点笨,但是放在这里是能够达到期望的,不知道走过路过的大神是否有更好更高效的方法,万望指导一二。
这是解决需求后趁热打铁写的(还不是记性不好怕忘了),可能有目前没发现的bug,先记录到此啦~

微信小程序·实现列表页和详情页同步收藏相关推荐

  1. 微信小程序电商项目商品详情页开发实战之数据绑定与事件应用

    各位CSDN的朋友,我们都知道,现在微信小程序电商平台特别火爆,所以我将以一个生鲜电商项目为例,为大家讲述微信小程序的实战化开发,价值几万元的成熟项目,你可千万不要错过哦. 大家直接通过视频链接直接看 ...

  2. 09_心理咨询_微信小程序项目实战_咨询师详情页静态效果实现

    一.咨询师信息 1.1 页面结构 在app.json里面的pages里面定义"pages/consultDetails/consultDetails" 1.定义一个view,给其添 ...

  3. 微信小程序商城系列之商品详情页

    wxml: <!--商品幻灯片--> <swiper indicator-dots="{{indicatorDots}}" autoplay="{{au ...

  4. 微信小程序新闻列表详情页

    微信小程序新闻列表详情页 不忘初心,方得始终.初心易得,始终难守 首先创建 post-detail 文件夹,创建四种文件. 修改 post.wxml 文件代码,给每个新闻块添加一个点击事件.并且我们要 ...

  5. 微信小程序 新闻列表及详情页

    微信小程序 新闻列表及详情页 页面效果 新闻列表 <view class="conatiner"><view class="news-item" ...

  6. 新闻列表页flex_微信小程序新闻网站列表页

    javascript 技术文章 开发 微信小程序新闻网站列表页 在app.json中可以设置所有文件的头部导航颜色 (是window属性的子属性) 在具体页面可以单独设置该页面的导航颜色 (直接写该属 ...

  7. 微信小程序多级列表绑定

    微信小程序多级列表绑定 1.wxml <view class="weui-form-preview margin-bottom" wx:key="" wx ...

  8. 微信小程序C语言通讯录,微信小程序のwxml列表渲染

    列表渲染存在的意义 以电商为例,我们希望渲染5个商品,而又希望容易改变,我们就要在wxml中动态添加. {{index+1}}:{{item.name}} Page({ data: { message ...

  9. 微信小程序 视频列表 封面图 禁止多个视频同时播放

    微信小程序视频列表用到的组件是  video 链接  https://developers.weixin.qq.com/miniprogram/dev/component/video.html 先附上 ...

  10. 微信小程序 — 长列表组件 recycle-view 详细教学

    微信小程序 - 长列表组件 recycle-view 踩坑问题全解 写在前面 引入长列表组件 recycle-view 长列表组件 recycle-view 的使用 问题一.如何增加下拉刷新功能? 问 ...

最新文章

  1. 收藏 | 28个R语言绘图的实用程序包!
  2. 《大数据系统基础》课程实践项目中期答辩顺利举行,清华持续探索大数据人才教育创新之路
  3. Python天气预报数据获取脚本
  4. C++函数模板Demo - win32 版
  5. Balanced Ternary String
  6. 【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动
  7. mysql的join算法,Mysql Join 连接算法
  8. centos mysql自动备份_CentOS下每天自动备份mysql数据库
  9. java8如何兼容java7_尽管使用Java 8功能,项目如何支持Java 7
  10. DataBseDesign工作笔记003---ERStudio使用笔记_基本使用方法详解
  11. Net设计模式实例之外观模式(Façade Pattern)(1)
  12. Exchange2003 备份与还原
  13. [c++11]我理解的右值引用、移动语义和完美转发
  14. Linux操作系统教学进度计划表
  15. 3行Python 代码实现图片压缩
  16. 四川大学研究生计算机学院官网,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示...
  17. Ubuntu系统在终端查看一些软硬件版本或文件大小的指令!
  18. python中表示分支结构_下面Python关键字中,不用于表示分支结构的是()。
  19. Qt FFmpeg视频播放器开发(二):FFmepg基本使用与视频播放
  20. java微信支付v3系列——8.微信支付之退款成功回调

热门文章

  1. 一元云购指定中奖版源码(开源+PC+移动端)
  2. 教你自定义百度网盘分享密码 提取码
  3. 剑圣一族x8鼠标驱动v1.21加强版
  4. javascript前端导出Excel简单写法
  5. 字体出现闪烁效果html,CSS3实现文字闪烁效果的多种形式代码
  6. jeesit的使用(一)
  7. python开发android应用app,python开发app开发框架
  8. php 中文字符串长度_js或php获取字符串长度中文1个字符,英文0.5个字符
  9. Python编写求100以内素数
  10. 【路径规划】全局路径规划算法——动态规划算法(含python实现)