使用vuex记住当前页面页码信息,以便从详情页返回列表页时能还原到上一次页面

news/2024/11/16 10:36:40/

文章目录

        • 一、在vuex中需要完成的工作
        • 二、在需要记住页面信息的列表页组件中添加如下代码,比如list.vue:
        • 三、在详情页添加返回按钮(可选)
        • 四、顺便来总结下,能返回上一级页面的方法有2类5种:
        • 五、总结,记住当前页面页码信息与框架无关,只与vuex有关,所以可以用于任意vue项目中

先来看看效果:


效果文字描述:

1、初始为页码1
2、点击页码4
3、跳转到第4页
4、点击右侧的按钮,跳转到详情页
5、展示的详情页,点击详情页的返回上一页按钮
6、回到列表页,列表页会定位到上一次的分页信息,即4.

一、在vuex中需要完成的工作

1、在store中新建一个modules(大部分vuex都会用modules来分割),比如取名为:backtolist.js,代码如下

/*记住当前分页信息,以便从详情页或其他页面返回列表页时,能还原上次页码*/
const backtolist = {state: {currentPage: 1},mutations: {SET_CURRENT_PAGE: (state, currentPage) => {state.currentPage = currentPage;}},actions: {setCurrentPage({ commit }, currentPage) {commit("SET_CURRENT_PAGE", currentPage);}}
};
export default backtolist;

2、在store/index.js中导入 backtolist:

import backtolist from "./modules/backtolist";
import getters from "./getters";
...
const store = new Vuex.Store({modules: {backtolist //返回上一级时,保留页码信息},getters
});export default store;

3、在getters.js中获取定义好的currentPage变量

const getters = {...currentPage: (state) => state.backtolist.currentPage,
};
export default getters;

二、在需要记住页面信息的列表页组件中添加如下代码,比如list.vue:

1、在script脚本中依次添加如下代码:

import { mapGetters } from "vuex";
export default {data() {return {listQuery: {page: 1,  //当前页码pageNum: 10, //一页有多少条},total:0 //总页数}},//使用计算属性同步store的currentPage变量computed: {...mapGetters([// 获得翻页信息"currentPage"])},created() {// 读取store里保存的分页信息// console.log(this.currentPage);this.listQuery.page = this.currentPage;},// 路由钩子函数。翻页时,记住当前页信息beforeRouteLeave(to, from, next) {// 只有跳转到指定的详情页才记录翻页信息if (to.name === "exportTaskManageList") {//this.listQuery.page 表示当前页码this.$store.dispatch("setCurrentPage", this.listQuery.page);} else {this.$store.dispatch("setCurrentPage", 1);}next();}
}

2、在当前列表页的分页组件中(比如elementUIel-pagination分页组件)添加如下信息:

之前的代码:

<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="listQuery.pageNum" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>

现在的代码:

<el-pagination v-if="total != 0"  //用于解决页面变了,但是页码视图没有更新的问题background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="listQuery.page" //添加了.sync:page-sizes="[10, 20, 30, 50]" :page-size="listQuery.pageNum" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>

三、在详情页添加返回按钮(可选)

在详情页添加返回不是实现记住分页信息的必须步骤。所以本步骤可选。当用户从详情页回到列表页,就会走列表页分页逻辑。添加返回按钮,是增加了用户体验,方便用户快速回到上一页。

代码如下:

<el-button type="info" @click="$router.back()" icon="el-icon-back">返回</el-button>

四、顺便来总结下,能返回上一级页面的方法有2类5种:

1、若项目使用vue-router,则可以用以下两种:

  1. this.$router.go(-1)

    1. this.$router.go(-1) //后退+刷新;
    2. this.$router.go(0) //刷新;
    3. this.$router.go(1) //前进;

    副作用:原页面表单中的内容会丢失。

  2. this.$router.back()

    1. this.$router.back() //后退
    2. this.$router.back(0) //刷新
    3. this.$router.back(1) //前进;

    副作用:原页表表单中的内容会保留。

2、也可使用JS的原生方法:

  1. history.go(-1);

  2. history.back();

那么vue的方法和JS的方法区别在哪里:

history.go(-1)是返回浏览器的上一页,而由于Vue是单页面应用,有的浏览器对于hash变更不认为是两个不同的页面,在hash模式下就不会跳回浏览器上一页

五、总结,记住当前页面页码信息与框架无关,只与vuex有关,所以可以用于任意vue项目中

从以上代码中,你也发现了,其实记住当前页码是使用了vuex的这个能保留全局变量的特性,与当前elementUI等前端UI框架无关,意味着你可以用于任何vue项目中。

本质上来说,甚至不需要用vuex来实现,比如你可以用H5的本地存储(localstage)对象来实现保存页面的功能。

如果你在web前端开发、面试、前端学习路线有困难可以加我V:imqdcnn。免费答疑,行业深潜多年的技术牛人帮你解决bug。

祝你能成为一名优秀的WEB前端开发工程师!


http://www.ppmy.cn/news/363958.html

相关文章

计算机毕业设计-家校通管理系统javaweb-校讯通管理系统ssm项目

计算机毕业设计-家校通管理系统javaweb-校讯通管理系统ssm项目 注意&#xff1a;该项目只展示部分功能&#xff0c;如需了解&#xff0c;评论区咨询即可。 作者&#xff1a;IT跃迁谷 1.开发环境 开发语言&#xff1a;Java框架&#xff1a;SSM(SpringSpringMVCMybatis)数据库&a…

【调剂】2023齐齐哈尔大学通信与信息系统(学硕)电子信息(专硕)招收调剂生...

公众号【计算机与软件考研】每天都会发布最新的计算机考研调剂信息&#xff01; 点击公众号界面左下角的调剂信息或者公众号回复“调剂”是计算机/软件等专业的所有调剂信息集合&#xff0c;会一直更新的。 要求&#xff1a;工科考生&#xff08;学硕、专硕均可&#xff09;&am…

无锡:严禁强制学生家长使用“校讯通”类服务

新出台的无锡市《关于规范使用“校讯通”类服务密切家校联系的通知》明确&#xff0c;使用“校讯通”类服务应当坚持学生家长自愿选择原则&#xff0c;教育行政部门和学校不得强制和变相强制学生家长使用&#xff0c;不得要求和变相要求学生家长订制超出基础服务项目范围的收费…

基于android的校园通系统

需求信息&#xff1a; 1.校园资讯管理 该模块主要功能包括&#xff1a;学校的基本信息展示&#xff0c;教务任务、校园热点新闻、竞赛信息、学术讲座等资讯的推送。用户可以根据自己的感兴趣的内容的关键字进行搜索查询&#xff0c;热点新闻根据用户浏览量进行实时推送&#xf…

沈阳移动打造“爱贝通”、“校讯通”业务助少年儿童健康成长

每个清晨&#xff0c;当一年级的“小豆包”屁颠颠地去上学&#xff0c;年轻父母的心里总放不下那份惦念&#xff1a;在陌生的校园里&#xff0c;他会安心上课吗&#xff1f;班级外出活动时&#xff0c;他会紧跟着老师和同学们吗&#xff1f;奶奶在放学时去接他&#xff0c;他们…

梳理Retrofit的知识体系

作者&#xff1a;RainyJiang 在学习Retrofit后&#xff0c;由于它本身就是OKHttp的封装&#xff0c;面试中也经常会被一起问到&#xff1b;单纯的解析它的源码学习难免会有点无从下手&#xff0c;往往让人抓不住重点&#xff0c;学习效率并不是很高&#xff0c;本文从提出几个问…

【GitLab】-HTTP Basic: Access denied.remote:You must use a personal access token

写在前面 本文简要说明GitLab配置accessToken以及双因子认证&#xff08;Two-factor authentication&#xff09;。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.配置accessToken3.克隆项目4.双因子认证 三、参考资料写在后面 一、场景描述 在使用账号和密码的方式拉取公…

Roxel 创世 NFT 作品集

Roxel 宇宙中的 Roxel 机器人、复古未来主义设备和生动机器的集合。在 Roxel 游戏的第一关「The Ascension」中&#xff0c;与它们一起玩耍或对抗&#xff0c;解锁访问独家内容。 该系列于北京时间 6 月 5 日晚上 11 点在 The Sandbox 市场平台上线。 作品一览 巨大的机械挖掘机…