免费创建小程序_vue 概况跳转至列表页完成列表页

发布时间:2021-01-07 14:59 作者:jianzhan

摘要: vue 本文关键详细介绍了vue 甲父亲提了一个要求,期待微信公众号内的商城系统可以像app一样,从产品 原本惦记着scrollBehavior应当能够考虑,可是具体实际操作中发觉:假如目录带

vue 详情跳转至列表页实现列表页缓存       这篇文章主要介绍了vue 详情跳转至列表页实现列表页缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

甲爸爸提了一个需求,希望公众号内的商城能够像app一样,从商品详情页跳转至列表页及其他列表页时,可以实现列表页缓存(数据不刷新、位置固定到之前点的商品的位置)

本来想着scrollBehavior应该可以满足,但是实际操作中发现:如果列表带着分页,位置是不会定位到点击的位置的

在网上转了一圈,终于找到适合自己的方法——beforeRouteLeave

注:beforeRouteLeave只对一级页面起作用,不适用于children中的其他二级或其他级别的页面 

以上是准备工作,接下来 可以步入正题了:

找到入口挂载页面:App.vue 在router-view外部包裹一个keep-alive的标签

因为不是所有页面都需要缓存,所以把需要缓存的页面中加入name值,并将name值加入keep-alive中

 keep-alive v-if="isRouterAlive" include="starShop" 
 router-view /router-view 
 /keep-alive 

当然,仅仅是这些,是不能实现缓存的,

刚开始我是学着网上的方法,这样写的,当从列表点入详情页时,就将 列表页的keepalive值,赋为true (实现缓存)

beforeRouteLeave(to, from, next) {
 if(from.path == '/sale/newGoods/index' to.path == '/goods/detail') {
 from.meta.keepAlive = true;
 this.loading = true;
 next();
 return
 } else {
 from.meta.keepAlive = false;
 window.location.reload();
 this.$destroy();
 next();
 return
},

但是后期甲爸爸发现一个bug: 当我从列表一点击进入详情之后,如果直接从详情页,点击进入别的店铺列表页,即列表二,最新的列表页内展示的商品列表是之前的数据,并没有变为最新的店铺列表内容 , 即列表二页面展示的还是列表一的商品

玩大了,这个问题比较着急啊,万一把顾客绕晕了,人家不买东西了,那我罪过不就大了咩

晚上趁着月黑风高、夜深人静的时候,我苦思冥想,终于把这个社会毒瘤挖掉了

我绝不是屈居于甲爸爸的淫威之下,只是因为我对技术的执著,过度追求完美的我,忍受不聊我的东西出现这样大的漏洞

要看解决办法的直接来这    ↓↓↓↓↓↓

首先摒弃上面的列表页面的方法

第一步:找到商品详情页,最为主角之一,我在这里用到了beforeRouteEnter、beforeRouteLeave

beforeRouteEnter (to, from, next) {
 next(vm = {
 vm.formUrl = from.path;
 console.log(vm.formUrl)
beforeRouteLeave(to, from, next) {
 to.meta.keepAlive = false;
 if(to.path == this.formUrl){
 to.meta.keepAlive = true;
 next();
 return
 }else{
 to.meta.KeepAlive = false;
 window.localStorage.removeItem('isRefresh')
 this.$destroy();
 next();
 return
},

beforeRouteEnter:进入路由之前执行的函数(拿到列表一的路由)

beforeRouteLeave:离开路由之前执行的函数(拿到列表二的路由)

通过这两个钩子,可以成功的拿到事件的另外两位主角路由(列表一、列表二)

在详情页中,当离开该页之前,在beforeRouteLeave内进行列表一、列表二的路由比较

若两路由相同,则跳转目的页面(to.meta.keepAlive)值为true,列表页面进行缓存(比如从详情页返回的时候)

若两路由不同,则跳转目的页面发生了变化(比如从鞋帽列表—— 鞋子商品—— 鞋子列表),则鞋子列表页面不需要缓存,需要刷新获取最新的鞋子列表数据

第二步:处理事件的第二主角——列表页面

这里我仅用到了beforeRouteEnter

这个钩子中,我们可以拿到当前页面的keepAlive值

这个值是在详情页中就已经给定的

如果是true,表示缓存,否则为不缓存(刷新)

防止页面一直刷新,变成死亡函数,我们要在data中声明一个变量isRefresh

isRefresh: window.localStorage.getItem('isRefresh') || true

window.localStorage.setItem('isRefresh',true) if(JSON.stringify(window.localStorage.getItem('isRefresh')) != false){ window.localStorage.setItem('isRefresh',false) location.reload(); return },

如果当前页to.meta.keepAlive值不为true,且值存在,则需刷新页面

防止页面一直刷新,

window.localStorage.setItem('isRefresh',true)

设置缓存变量isRefresh,值为true(表示需要刷新)

当to.meta.keepAlive值不为true且isRefresh值为true,页面刷新,且isRefresh赋值为false,即关闭刷新

vm.goods=[];是当页面跳去新的列表页刷新之前,会出现短暂的列表展示,为了避免不必要的误导,在检测到是跳转到新的列表页时,我将列表页的goods列表情况,视觉感受会好一些

因项目不同而异,不需要可以去掉

多张页面之间跳转,判断是否需要缓存或刷新获取新数据,就是这样了

或许因为业务需求不同,技术处理方式可能会不同,希望能帮助到各位,或者给各位一些启发,也希望大家多多支持凡科。


  • 抖音短视频电子商务微信

    原文中由天店通(tdtxcx666)原创发布,谢绝转截!若问抖音短视频小视频运狗转现的规范配备是什么?在较长时间内回应全是是购物车,但在一系列产品商品的调整之后,现如今抖音短

  • 产业园区公司

    模拟题目:产业链产业园区企业|【乘云手机微信微信小程序直播间间】迅速五分鐘公布,独家代理代理商具体实际操作工作中工作经验共享资源! 二月28日,手机上手机微信官方网网公

  • 怎样让微信小程序在后台

    原题目:怎样让微信小程序在后台管理维持运作?| 微信小程序问与答 #22 第 22期 大家再用微信小程序听歌、去看书的情况下,朋友发过来信息,大家都期待能迅速把微信小程序放进后

  • 手机微信微信小程序和H

    原题目:手机微信微信小程序和H5傻傻分不清楚,看了你也就搞清楚二者的差别了! 微信小程序问世之后,虽然手机微信精英团队干了许多有关微信小程序的普及化作业,可是還是有许

  • 怎样有着自身的手机微信

    原题目:怎样有着自身的手机微信相册图片?这个微信小程序帮你轻轻松松建立 微信小程序感受师:陈丹阳市 每一次家中出行、朋友聚会活动,都是有一大堆相片必须共享。 但是发一