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

news2024/11/15 23:54:53

文章目录

        • 一、在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.coloradmin.cn/o/642736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动设备管理:自带设备办公(BYOD)管理

什么是自带设备办公&#xff08;BYOD&#xff09; 自带设备办公&#xff08;BYOD&#xff09;指一些企业允许员工携带自己的笔记本电脑、平板电脑、智能手机等移动终端设备到办公场所&#xff0c;并可以用这些设备获取公司内部信息、使用企业特许应用的一种政策&#xff0c;企…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT&#xff08;Diagnostic Extract Template&#xff09;是AUTOSAR定义的诊断提取模板&#xff0c;用于DCM&#xff08;Diagnostics Communication Manager&#xff09;、DEM&#xff08;Diagnostics Event Manager&#xff09;和FIM&#xff…

【数据库原理与应用 - 第六章】T-SQL 在SQL Server的使用

目录 一、数据库定义语言DDL 1、数据库的定义 &#xff08;1&#xff09;创建数据库 &#xff08;2&#xff09;管理数据库 2、基本表的定义 &#xff08;1&#xff09;创建基本表 &#xff08;2&#xff09;修改基本表 3、索引的定义 &#xff08;1&#xff09;创建索…

东北小胖丫华夏受邀拍摄“沈水之阳,我心向往,寻美沈阳”宣传片

6月1日-4日&#xff0c;东北小胖丫华夏带领华夏星闪闪爱心公益服务队的小志愿者们&#xff0c;在沈阳的地标性建筑——沈阳故宫、中街、五里河公园等地&#xff0c;拍摄了“寻美沈阳”宣传片。 宣传片以“沈水之阳&#xff0c;我心向往&#xff0c;我爱沈阳&#xff0c;我爱家乡…

希尔贝壳邀您参加2023深圳国际人工智能展览会

2023深圳国际人工智能展览会“AIE”将于2023年5月16-18日在深圳国际会展中心 (宝安)举办&#xff0c;希尔贝壳受邀参加&#xff0c;展位号&#xff1a;A331。 伴随着智能行业的快速发展&#xff0c;展会已被越来越多的企业列入每年必选展会&#xff0c;也成为各采购商选购的理…

互联网 Java 高级工程师面试 1000 题 + 答案汇总(社招最新版)

作为一个 Java 程序员&#xff0c;你平时总是陷在业务开发里&#xff0c;每天噼里啪啦忙敲着代码&#xff0c;上到系统开发&#xff0c;下到 Bug 修改&#xff0c;你感觉自己无所不能。然而偶尔的一次聚会&#xff0c;你听说和自己一起出道的同学早已经年薪 50 万&#xff0c;而…

web期末大作业--网页设计 HTML+CSS+JS(附源码)

目录 一&#xff0c;作品介绍 二.运用知识 三.作品详情 四.部分作品效果图 我的&#xff1a;​编辑 五.部分源代码 六.文件目录 七.源码 一&#xff0c;作品介绍 作品介绍&#xff1a;该作品是一个是一个关于影视作品的网页&#xff0c;一共有五个页面&#xff0c;主页&a…

安全狗(云)工作负载安全保护解决方案护航电信运营商多云环境下的数字安全

随着互联网技术的发展&#xff0c;云计算、大数据、物联网、微服务、容器等新技术的尝试和应用&#xff0c;基础设施架构呈现出更加“混合化”的趋势&#xff0c;虚拟化、微服务、容器等工作负载成为了新的业务载体。 一 保护&#xff08;云&#xff09;工作负载安全迫在眉睫…

迪赛智慧数——柱状图(极坐标扇图):我国民众普遍面临的睡眠问题

效果图 常见的睡眠问题&#xff0c;你占了哪一样? 在网络科技发达的今天&#xff0c;伴随着高压快节奏的生活状态&#xff0c;各阶层各年龄段的睡眠问题接踵而至&#xff0c;甚至只增不减&#xff0c;一觉到天亮的好睡眠变得无价。据最新睡眠报告数据显示&#xff0c;75%的受…

华为OD机试真题 JavaScript 实现【最多提取子串数目】【2023Q1 100分】

一、题目描述 给定由[a-z] 26 个英文小写字母组成的字符串 A和 B&#xff0c;其中A中可能存在重复字母&#xff0c;B 中不会存在重复字母&#xff0c;现从字符串 A 中按规则挑选一些字母&#xff0c;可以组成字符串 B。 挑选规则如下: 同一个位置的字母只能被挑选一次&#…

快速上手Opencv:HighGUI图形用户界面

HighGUI图形用户界面 1.图像的载入、显示和输出到文件 1.1 图像的载入&#xff1a;imread()函数 Mat imread(const string &filename,int flags1) 第一个参数&#xff1a;图片路径第二个参数&#xff1a;载入标识&#xff0c;指定一个加载图像的颜色类型。可以看到它自…

解决@Transactional事务不回滚问题

1、事务不回滚情况 - 演示 1.1 情况说明&#xff1a; service层加了事务管理器Transactional &#xff0c;报错后&#xff0c;事务并没有同时回滚&#xff1b; service层调用了两个dao层的方法&#xff0c;执行第一个dao层方法&#xff0c;正常往数据库插入数据。执行第二个d…

selenium4-获取页面元素相关信息

引言 现在&#xff0c;越来越多的公司和企业开始将业务转移到线上平台。而对于网站或者应用的测试、开发人员来说&#xff0c;获取页面元素相关信息是解决很多问题的关键之一。 如果您正为此而苦恼&#xff0c;那么恭喜您&#xff0c;因为这篇文章将会为您揭秘Selenium4获取页…

HAProxy概述、搭建Web群集

HAProxy概述、搭建Web群集 一、HAProxy概述1、HAProxy的主要特性2、常见的Web集群调度器3、Haproxy应用分析4、Haproxy调度算法原理 二、LVS、Nginx、HAproxy的区别三、LVS、Nginx、HAproxy的优缺点1、Nginx的优点&#xff1a;2、Nginx的缺点&#xff1a;3、LVS的优点&#xff…

数据抓取,驱动商业智能的密码|HTTP代理的应用

在信息爆炸的时代&#xff0c;数据无疑成为了推动行业发展的重要动力。而数据抓取作为一种强大的工具&#xff0c;已经成为众多行业的秘密武器&#xff0c;为商业决策提供了前所未有的洞察力和竞争优势。让我们揭开数据抓取的神秘面纱&#xff0c;探索它在各个行业中的高级应用…

SpringCloud microservice-student-provider-1001服务提供者项目建立(三)

新建一个服务器提供者module子模块&#xff0c;类似前面建的common公共模块&#xff0c;名称是 microservice-student-provider-1001 pom.xml改成&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSc…

go/go-pg插入time.Time字段为date类型时值自动变化的问题

今天偶然间发现一个问题&#xff0c;基于go-pg框架插入数据时&#xff0c;时间值自动减了1天。 目录 背景 现象与场景还原 问题解决与总结 背景 结构体中包含时间列类型&#xff0c;列类型是Date&#xff0c;对应的结构体类型是time.Time&#xff0c;此时对此对象做插入操…

Segment Anything使用手册(交互式数据标柱|自动数据标柱)

主要内容包含segment-anything项目的安装、基于SamPredictor对单点输入生成mask、基于SamPredictor对多点输入生成mask、基于SamAutomaticMaskGenerator自动生成mask。 Segment Anything项目是一个可以对任何图像进行分割的项目&#xff0c;其论文介绍可以查看https://blog.cs…

【JavaWeb】Cookie和Session的使用场景分析与应用

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a;保护小周ღ Cookie 和 Session 都是网页中常用的状态保持的技术&#xff0c;它们可以帮助网站识别用户身份&#xff0c;保存用户状态等&#xff0c;什么是 Cookie &#xff1f;什么是 Session &#xff1f;他们具体是什么…

Docker部署SonarQube代码质量检查平台+PostgreSQL数据库

一、安装PostgreSQL11(PostgreSQL7.9之后不支持MySQL) 检查代码的时候&#xff0c;仓库或者本地的代码会全部存储到postgresql数据里中&#xff0c;所以容量尽量大点&#xff0c;我这给个300G 指定拉取postgres11版本&#xff0c;不要postgres:latest&#xff0c;因为你部署so…