我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue如何实现关联页面多级跳转功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue如何实现关联页面多级跳转功能

小编给大家分享一下Vue如何实现关联页面多级跳转功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

背景

在项目开发过程中,经常会遇到从上一个页面跳转到下一个页面的需求,俗称 下钻 。比如在概览页面的数据,需要查看详情,点击某个图表或按钮,即可跳转到详情页面查看详情数据。

目前为止,我们的项目中还没有一个统一的页面跳转方法,实现页面跳转的方式也因人而异,并且现有的很多项目只能在两个页面之间来回跳转,基本没有完整的实现多个页面互相跳转的功能。

关联页面跳转做为项目的常用功能,并且执行的都是重复性高的代码逻辑,非常有必要把相关的逻辑抽出来,封装成简单易用的公共方法和公共组件。

目的

统一各个项目的关联跳转方法逻辑,封装成简单易用的公共组件。

方案设计

首先,分析一下关联页面跳转大概的逻辑步骤:

  1. 进入 页面 A ;

  2. 从 页面A 跳转到 页面 B ;

  3. 进入 页面 B ;

  4. 返回 页面 A ;

  5. 进入 页面 A ,即重新回到步骤 1 开始。

然后,对以上步骤进行细分:

  1. 假设步骤 1 是正常进入页面,这时候没有逻辑需要处理;

  2. 步骤 2 需要从 页面 A 跳转到 页面 B ,要实现这一步,就必需知道 页面 B 的路由地址,通过 VueRouter 跳转到 页面 B 的路由地址。并且如果 页面 B 需要的一些查询数据,就要把 页面 B 的数据保存起来,等到步骤 3 使用;

  3. 进入 页面B 后,如果要获取 页面 A 传过来的一些查询数据,就要先判断是不是从 页面 A 跳转过来的,如果是,就从保存数据的地方获取 页面 A 传过来的数据;

  4. 从 页面 B 返回 页面 A ,就必需知道 页面 A 的路由地址,通过 VueRouter 跳转到 页面 A 的路由地址。这里的路由地址,需要在步骤 2 跳转之前进行保存,这里才可以取到;

  5. 可以发现,步骤1和步骤5都是进入 页面 A ,但是执行的逻辑却不一样,所以, 页面 A 如果要恢复跳转到 页面 B 之前的一些数据,就要先判断是不是从 页面 B 跳转回来的,如果是,就从保存数据的地方获取跳转之前 页面 A 的数据;这里的跳转之前的数据,需要在步骤 2 跳转之前进行保存,这里才可以取到。

接下来,为了实现上述的逻辑,我们先确定用来保存 页面 A 和 页面 B 的数据的方法,这里采用的是 VUEX 。再梳理一下以上逻辑步骤,画出流程图。

流程图

源页面

Vue如何实现关联页面多级跳转功能

目标页面

Vue如何实现关联页面多级跳转功能

具体实现

源页面跳转到目标页面

这一步的逻辑写在 VUEX 中,每次需要进行这一步操作,直接调 VUEX 中对应的方法即可。具体实现逻辑,就是先把源页面和目标页面的标识添加到路由参数上(目的是为了区分当前页面是进行的目标页面还是返回的源页面),再保存源页面和目标页面的数据,然后进行路由跳转。

在 store.js 中添加两个以下两个变量:

tgtPageParams: {}, // 关联跳转的目标页面数据(只保留一项数据)class="lazy" data-srcPageParams: [], // 关联跳转的源页面数据(数组类型,保留多个页面的数据,可以多层返回,直到返回初始页面)

然后添加以下方法:

// 关联跳转,跳转到目标页面,并保存源页面和目标页面的数据到 VuexgoTargetPage(state, options) {  // 在源页面的 query 添加 tgtPageName 标识,记住目标页面  options.class="lazy" data-srcParams.query = Object.assign({}, options.class="lazy" data-srcParams.query, { tgtPageName: options.tgtParams.name });  // 在目标页面的 query 添加 class="lazy" data-srcPageName 标识,记住源页面  options.tgtParams.query = Object.assign({}, options.tgtParams.query, { class="lazy" data-srcPageName: options.class="lazy" data-srcParams.name });  state.class="lazy" data-srcPageParams.push(options.class="lazy" data-srcParams); // 保存源页面数据  state.tgtPageParams = options.tgtParams; // 保存目标页面数据  router.push({ name: options.tgtParams.name, query: options.tgtParams.query }); // 跳转到目标页面},

目标页面返回源页面

这一步的逻辑写在 VUEX 中,每次需要进行这一步操作,直接调 VUEX 中对应的方法即可。具体实现逻辑,就是从 state.class="lazy" data-srcPageParams 中取到源页面的数据(包括路由地址和参数),然后进行路由跳转。

在 VUEX 中添加以下方法:

// 关联跳转,跳转回源页面goSourcePage(state, vm) {  let obj = state.class="lazy" data-srcPageParams.slice(-1)[0]; // 取数组的最后一项  // 如果 Vuex 有上一页的数据,则根据 Vuex 的数据返回上一面  if (obj && Object.keys(obj).length > 0) {    router.push({ name: obj.name, query: obj.query }); // 进行跳转  }  // 如果 Vuex 中没有上一页的数据,但是路由上有上一页的标志,则根据路由标志返回上一页(这是为了防止在详情页中刷新时,Vuex 数据丢失,无法返回上一页的问题)  else if (vm && vm.$route.query.class="lazy" data-srcPageName) {    router.push({ name: vm.$route.query.class="lazy" data-srcPageName });  }},

进入目标页面使用VUEX数据/返回源页面恢复VUEX数据

这一步的逻辑是把上面方案设计中的 步骤 3 和 步骤 5 合并起来了,写在公共函数文件中,每次需要进行这一步操作,直接调 Vue.prototype 中对应的方法即可。具体实现逻辑是:判断当前页面是源页面还是目标页面,如果是目标页面,那就使用源页面传过来的数据,如果是源页面,就恢复跳转之前的数据。

在公共函数文件 utils.js 中添加以下方法,并挂载到 Vue.prototype 上:

$changeVueData: (vm) => {  let tgtParams = store.state.tgtPageParams;  let class="lazy" data-srcParams = vm.$store.state.class="lazy" data-srcPageParams.slice(-1)[0] || {}; // 取最后一个元素值  let name = vm.$route.name;  let query = vm.$deepCopyJSON(vm.$route.query); // 这里深拷贝是因为 $route.query 需要更新  // 判断当前页是 目标页面 还是 源页面  // 判断条件是 先判断路由名是否一致,再判断指定的 query 的属性值是否也一致  let isTgtPage = tgtParams.name === name &&    (tgtParams.checkKeys ? tgtParams.checkKeys.every(key => tgtParams.query[key] === query[key]) : true);  let isclass="lazy" data-srcPage = class="lazy" data-srcParams.name === name &&    (class="lazy" data-srcParams.checkKeys ? class="lazy" data-srcParams.checkKeys.every(key => class="lazy" data-srcParams.query[key] === query[key]) : true);  // 如果当前页面是目标页面  if (isTgtPage) {    Object.assign(vm.$data, tgtParams.data || {}); // 将 源页面传过来的数据 更新到当前页面的 data(),以便页面进行查询  }  // 如果当前页面是源页面  if (isclass="lazy" data-srcPage) {    Object.assign(vm.$data, class="lazy" data-srcParams.data || {}); // 跳转前保存的数据 更新到当前页面的 data(),以便页面进行还原    store.commit('popSourcePage'); // 将 class="lazy" data-srcPageParams 的最后一项数据删除    // 源页面关联跳转逻辑结束后,清除掉当前页路由上的目标页标识,防止刷新页面有问题    delete query.tgtPageName;    vm.$router.push({ name, query });  }},

返回上一页按钮

为了更方便的使用关联跳转功能,把返回上一页按钮封装成了一个组件,具体实现代码如下:

// back-button.vue<template>  <button class="primary-btn return-btn" v-if="showBackBtn" @click="backFn">    <i class="return-icon"></i>{{ backText }}  </button></template><script>export default {  name: 'back-button',  props: {    // 返回上一页的文字    backText: {      type: String,      default: () => '上一步'    },    // 返回上一页的函数    backFn: {      type: Function,      default: () => {}    }  },  data() {    return {      showBackBtn: false,    };  },  mounted() {    this.setBackBtnShow();  },  activated() {    this.setBackBtnShow();  },  methods: {    // 更新返回上一页按钮的状态    setBackBtnShow() {      this.$nextTick(() => {        let class="lazy" data-srcPage = this.$store.state.class="lazy" data-srcPageParams.slice(-1)[0];        this.showBackBtn = Boolean(class="lazy" data-srcPage && Object.keys(class="lazy" data-srcPage).length > 0);      });    },  },};</script><style scoped lang="scss"></style>

容错部分

考虑到关联跳转的过程中,有可能用户会突然中断,或者刷新页面等异常操作,设计了部分容错机制:

// 根组件 App.vuewatch: {  // 监听,当路由发生变化的时候执行  $route(to, from) {    // 如果即不是源页面,也不是目标页面,则清空 Vuex 中保存的数据    // 防止在关联跳转的过程中切换菜单或者进行其他操作,导致 Vuex 中有上一次关联跳转残留的数据    if (!to.query.class="lazy" data-srcPageName && !to.query.tgtPageName) {      this.$store.commit('clearTargetPage');      this.$store.commit('clearSourcePage');    }  },},

使用示例

根据上述方案设计部分的步骤:

步骤 1 和步骤 5 ,进入 页面 A ,逻辑在同个页面,代码如下:

// 页面 A.vuemounted() {  vm = this;  vm.$changeVueData(vm); // 关联跳转相关页面,每次进入页面,必需执行 $changeVueData 函数,具体用法参考调用方法的注释  vm.ready();},步骤 2,从 页面A 跳转到 页面 B ,代码如下:// 页面 A.vuemethods: {  // 跳转到 B 页面  goUserSituation: function (name) {    let class="lazy" data-srcParams = {      name: vm.$route.name,      query: vm.$route.query    };    let tgtParams = {      name: 'user-situation',      data: {        checkedSystem: name      }    };    vm.$goTargetPage(class="lazy" data-srcParams, tgtParams);  },},

步骤 3,进入 页面 B ,代码如下:

// 页面 B.vuemounted() {  vm = this;  vm.$changeVueData(vm); // 关联跳转相关页面,每次进入页面,必需执行 $changeVueData 函数,具体用法参考调用方法的注释  vm.ready();},步骤 4,返回 页面 A ,代码如下:// 页面 B.vue<template>  <div>    <backButton :backFn="$goSourcePage"></backButton>      </div></template>

以上是“Vue如何实现关联页面多级跳转功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue如何实现关联页面多级跳转功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue如何实现关联页面多级跳转功能

小编给大家分享一下Vue如何实现关联页面多级跳转功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景在项目开发过程中,经常会遇到从上一个页面跳转到下一个页面的需
2023-06-14

vue实现三级页面跳转功能

这篇文章主要介绍了vue实现三级页面跳转功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-10-18

如何在 Golang 中实现页面跳转功能

在 Golang 中实现页面跳转功能通常涉及 Web 开发领域,主要是通过使用路由实现页面之间的跳转。下面将具体介绍如何在 Golang 中实现页面跳转功能,并提供代码示例。首先,我们需要使用一个 Web 框架来简化开发工作。在本示例中,
如何在 Golang 中实现页面跳转功能
2024-03-06

jquery如何实现点击按钮跳转页面功能

今天小编给大家分享一下jquery如何实现点击按钮跳转页面功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,在 HTM
2023-07-05

如何使用PHP实现跳转两个页面的功能

这篇文章主要介绍了如何使用PHP实现跳转两个页面的功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用PHP实现跳转两个页面的功能文章都会有所收获,下面我们一起来看看吧。一、使用header()函数重定向
2023-07-05

react如何实现多个页面之间跳转

本文小编为大家详细介绍“react如何实现多个页面之间跳转”,内容详细,步骤清晰,细节处理妥当,希望这篇“react如何实现多个页面之间跳转”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。react多个页面之间跳转
2023-07-04

如何在PHP中实现跳转到指定页面的功能

标题:PHP实现跳转页面功能的具体代码示例在web开发中,经常需要实现页面跳转的功能,PHP作为一门流行的服务器端编程语言,提供了多种方式来实现页面的跳转。本文将介绍在PHP中如何实现跳转到指定页面的功能,同时提供具体的代码示例。一、h
如何在PHP中实现跳转到指定页面的功能
2024-03-08

微信小程序如何实现页面跳转功能详解

这篇文章主要给大家介绍了关于微信小程序如何实现页面跳转功能的相关资料,包括页面跳转的方式、跳转传参的方法以及页面返回的操作,通过简单的代码示例,帮助读者快速掌握微信小程序页面跳转的基本用法,下面需要的朋友可以参考下
2023-05-13

如何在Android中利用Intent实现一个页面跳转功能

本篇文章为大家展示了如何在Android中利用Intent实现一个页面跳转功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Intent实现页面之间跳转1、无返回值startActivity(int
2023-05-30

Vue项目中如何实现带参跳转功能

这篇文章主要介绍Vue项目中如何实现带参跳转功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!页面介绍:主页面:name —> shishengzuotanhuichaxun此页面表格中的数据均通过接口从后端获取数组
2023-06-14

vue-router是如何实现路由跳转和页面渲染的

Vue-router是Vue.js官方的路由管理工具,支持基于Vue.js构建单页应用(SPA),它提供的路由功能让我们能够通过管理URL中的路径,来控制页面的跳转和展示。本文将着重探讨 Vue-router 的底层实现原理,分析 Vue-router 是如何实现路由跳转和页面渲染的。一、Vue-router的基本使用使用 Vue-router,我们需要进行以下步骤:1. 安装
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录