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

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

需求

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

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. python学哪些东西_想要自学Python ,需要准备什么东西?
  2. 梦想成现实:用xUnit.net在单元测试中实现构造函数依赖注入
  3. python简介怎么写-python爬虫简历怎么写
  4. android 广播观察者,BroadcastReceiver和Activity之间的通信 – android
  5. 在日期格式化的时候提示错误:Tostring没有采用一个参数的重载
  6. php echo表单提交_PHP常见面试题及答案
  7. 搭建自己的Docker Harbor
  8. spring源码阅读(1/4) - Bean生成
  9. mybatis思维导图,让mybatis不再难懂(二)
  10. 面试被吊打 - Redis原理
  11. 我开博客啦,呵呵,欢迎各位朋友。
  12. linux下查看usb插拔日志,Linux:如何检测usb键盘是否已插入和拔出
  13. 使用 spring-boot 的 RabbitMQ 范例测试我的 RabbitMQ 服务器
  14. 西门子S7-1200PLC通过脉冲+方向控制台达ASDA-B2伺服的具体方法步骤(图文)
  15. python参考手册小说_-精选版python 中文手册.pdf
  16. IT项目管理表格集合
  17. MySQL相关知识整理
  18. android锁屏显示
  19. 智慧农业智能节水灌溉 机井灌溉控制器
  20. word论文页眉的横线怎么删除去掉

热门文章

  1. 串口上升时间标准_为什么串口比并口快?
  2. java基本的商品管理系统
  3. oracle库客户端完整卸载,卸载Oracle数据库或客户端​
  4. SSH隧道putty使用
  5. JUnit4单元测试入门教程
  6. C语言stdio头文件常见的输入输出库函数
  7. 通达信 移动平均算法_涨停板这样选!首次公开通达信超级选股法使用流程(建议收藏)...
  8. TIPTOP实施基础资料收集计划表
  9. Atmega328p-pu与Atmega16A-PU区别
  10. 车辆跟踪 matlab,车辆跟踪matlab