vue之列表页进入刷新,返回不刷新以及按需刷新的设计思路和实现方式

1. vue实现页面缓存

vue中,许多组件需要实时刷新,譬如详情页。但有时候某些组件不需要重复渲染,譬如信息列表页。此时,我们可以使用<keep-alive>标签,实现组件缓存。写法如下,在app.vue文件中:

// app.vue
<template>
  <div id="app">
    <keep-alive>
        <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
  </div>
</template>

router文件夹下的index.js中,给list页面的路由meta配置对应参数keepAlive值为true,即可针对性缓存list页面,但考虑到全局多个页面需要缓存,并实现按需刷新的功能,所以给list页面的路由meta配置对应第三方固定参数keepAliveFlage值为true,方便后续全局混入处理:

const routers = [
  {
    path: '/list',
    meta: {title: '列表页',keepAliveFlage:true},
    component: (resolve) => require(['../pages/list'], resolve),
  },
  {
    path: '/detail',
    meta: {title: '详情页'},
    component: (resolve) => require(['../pages/detail'], resolve),
  },
];
export default routers;

2. 实现列表页的进入刷新,返回不刷新与按需刷新

在缓存了列表页进入详情页之后,进入详情页修改了列表页数据,此时再返回列表页时,就需要对列表页进行刷新。而单纯的返回列表页则不会刷新

我们可以通过beforeRouteEnter以及beforeRouteLeave两个钩子来实现需求。在详情页执行以下代码:

// activated-reload.js
/**
 * @Description  : 全局混入:页面进入刷新,返回不刷新以及按需刷新
 */
export default {
	beforeRouteEnter: function (to, from, next) {
		// 页面状态初始化
		to.meta.refresh = false //默认返回列表页时,列表页不执行刷新
		if(from.meta.keepAliveFlag) from.meta.keepAlive = true //当路由设置keepAliveFlag时,列表页默认缓存
		next()
	},
	beforeRouteLeave: function (to, from, next) {
    if (from.meta.refresh) to.meta.keepAlive = false // 判断需要refresh时,返回列表页时,列表页执行刷新
		next()
	},
	methods: {
		activatedReload() {
			this.$route.meta.refresh = true //返回列表页时,列表页执行刷新
		},
	},
}

将上面的方法全局混入mixin,这样全局页面都可实现按需刷新,无需各个页面、组件重复配置:

// main.js
// 页面<keepAlive>时设置按需刷新 全局混入
import ActivatedReload from "@/mixins/activated-reload";
Vue.mixin(ActivatedReload)

当进入详情页时,初始化页面状态,处于默认返回列表页时,列表页不执行刷新、当列表页路由设置keepAliveFlag时,列表页默认缓存状态。当在详情页执行了数据操作后,调用activatedReload()方法,将列表页的缓存状态改为false,即可实现返回列表页后刷新。

/******************** 详情页 detail.vue ************************************/

// 提交数据后,需要刷新列表页
submitForm () {
    api(data).then((res) => {
      if (res.code === 0) {
        // 返回列表页刷新
        this.activatedReload();
        this.goBack();
      }
    })
},
    
// 单纯返回,不刷新页面
goBack () {
  this.$router.back();
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yige001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值