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

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

先来看看效果:

效果文字描述:

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) //前进;
  1. 副作用:原页面表单中的内容会丢失。
  2. this.$router.back()
  1. this.$router.back() //后退
  2. this.$router.back(0) //刷新
  3. this.$router.back(1) //前进;
  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前端开发工程师!

相关文章
|
7月前
table最后一页所有数据批量删除或者单个删除,怎么自动回到上一页
table最后一页所有数据批量删除或者单个删除,怎么自动回到上一页
100 1
|
7月前
|
小程序 JavaScript 前端开发
小程序如何刷新当前页面?
小程序如何刷新当前页面?
1378 0
|
7月前
|
小程序
小程序如何刷新当前页面
小程序如何刷新当前页面
396 0
|
数据采集 JSON 小程序
小程序警告:根据 sitemap 的规则[0],当前页面 [pagesindexindex] 将被索引
这是一个警告的提示,至于是否影响性能,这个我不太清除。 根据官方文档的说法:微信已开放小程序内搜索,开发者可以通过 sitemap.json 配置,或者管理后台页面收录开关来配置其小程序页面是否允许微信索引。当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引。 就是说用户可以根据微信吧爬虫给你提供的索引更快的搜索到你。 最简单的方法就是你直接把配置关了不让他索引:
204 0
|
缓存
nuxt2:keepalive 列表页到详情,详情回到列表,列表恢复离开时的状态
nuxt2:keepalive 列表页到详情,详情回到列表,列表恢复离开时的状态
155 0
|
JSON 移动开发 Android开发
老板要我做个新闻界面,我反手一套列表组件~(列表系列)
普通的基础组件自然不能满足我们的日常开发需求,所以让小T带大家了解Flutter开发中的常用组件。
老板要我做个新闻界面,我反手一套列表组件~(列表系列)
|
JavaScript
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
438 0
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
|
存储 缓存 JavaScript
Vue详情返回列表页记住滚动条位置并保持
Vue详情返回列表页记住滚动条位置并保持
|
缓存
详细页返回列表保留原来滚动条所在位置
最近学校要求做个项目,在新闻列表页中向下滑动后,随别打开一个新闻,进入该新闻的详情页面,当看完后,从详情页返回到新闻列表页。而且滚动条也回到了最顶上的第1个新闻了。这样影响用户的体验效果。
334 0