vue页面相互跳转,vue超链接跳转新页面

  vue页面相互跳转,vue超链接跳转新页面

  本文主要介绍Vue实现相关页面多级跳转(页面钻取)功能的相关信息。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。下面让我们跟随边肖一起学习。

  

背景

  在项目开发过程中,我们经常会遇到从上一页跳到下一页的需求,俗称钻取。例如,如果要查看概览页面上的数据,请单击图表或按钮跳转到详细信息页面查看详细数据。

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

  相关页面跳转作为项目的常用功能,是由重复的代码逻辑执行的,所以需要提取相关逻辑,封装成简单易用的公共方法和公共组件。

  

目的

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

  

方案设计

  首先,分析相关页面跳转的一般逻辑步骤:

  进入a页;

  从A页跳到B页;

  进入b页;

  回到a页;

  转到A页,也就是回到第一步重新开始。

  然后,细分上述步骤:

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

  第二步你需要从A页跳转到B页,要实现这一步,你必须知道B页的路由地址,通过VueRouter跳转到B页的路由地址。而如果B页需要一些查询数据,就需要保存B页的数据,等到第3步使用;

  进入B页后,如果想从A页获取一些查询数据,首先要判断是否从A页跳转,如果是,就从存储数据的地方获取A页的数据;

  从B页返回A页,必须知道A页的路由地址,通过VueRouter跳转到A页的路由地址。这里的路由地址需要在第二步跳转之前保存,以便在这里获取;

  可以发现,第一步和第五步都进入了A页,只是执行逻辑不同。所以,如果A页想在跳转到B页之前恢复一些数据,就要先确定是否从B页跳回,如果是,就在从保存数据的地方跳转之前获取A页的数据。此处跳转前的数据需要在步骤2跳转前保存,以便在此处检索。

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

  

流程图

  源页面

  目标页面

  

具体实现

  源页面跳转到目标页面。

  这一步的逻辑是用VUEX写的。每次需要执行该步骤时,可以直接在VUEX中调整相应的方法。具体逻辑是在路由参数中加入源页面和目标页面的标识(目的是区分当前页面是目标页面还是返回的源页面),然后保存源页面和目标页面的数据,再进行路由跳转。

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

  TgtPageParams: {},///关联跳转的目标页面的数据(只保留一个数据)

  SrcPageParams: [],///关联跳转的源页面数据(数组类型,保存多个页面的数据,可以分多层返回,直到返回初始页面)

  然后添加以下方法:

  //关联跳转,跳转到目标页面,将源页面和目标页面的数据保存到Vuex。

  goTargetPage(状态,选项){

  //在源页面的查询中加入tgtPageName logo,记住目标页面。

  options.srcParams.query=object . assign({ },options . src params . query,{ tgtPageName:options . TGT params . name });

  //在目标页面的查询中加入srcPageName logo,记住源页面。

  options.tgtParams.query=object . assign({ },options . TGT params . query,{ srcPageName:options . src params . name });

  state . srcpageparams . push(options . src params);//保存源页面数据

  state . tgtpageparams=options . TGT params;//保存目标页面数据

  router . push({ name:options . TGT params . name,query:options . TGT params . query });//跳转到目标页面

  },

  

目标页面返回源页面

  这一步的逻辑是用VUEX写的。每次需要执行该步骤时,可以直接在VUEX中调整相应的方法。具体逻辑是从state.srcPageParams中获取源页面的数据(包括路由地址和参数),然后进行路由跳转。

  在VUEX中添加以下方法:

  //关联跳转,跳转回源页面。

  goSourcePage(状态,虚拟机){

  let obj=state . srcpageparams . slice(-1)[0];//取数组的最后一项

  //如果Vuex有上一页的数据,根据Vuex的数据返回上一页。

  if (obj Object.keys(obj)。长度0) {

  router.push({ name: obj.name,query:obj . query });//跳一跳。

  }

  //如果Vuex中没有上一页的数据,但是路线上有上一页的标志,则根据路线的标志返回上一页(这是为了防止在详情页刷新时Vuex数据丢失无法返回上一页的问题)

  else if (vm vm。$route.query.srcPageName) {

  router.push({ name: vm。$ route . query . srcpagename });

  }

  },

  

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

  这一步的逻辑是将上述方案设计中的第3步和第5步结合起来,写入公共函数文件中。每次需要执行这一步时,可以直接在Vue.prototype中调整相应的方法,具体实现逻辑是:判断当前页面是源页面还是目标页面。如果是目标页面,则使用从源页面传输的数据。如果是源页面,恢复跳转前的数据。

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

  /**

  *此方法可用于链接与跳转相关的页面。

  * 1.源页面:保存在Vuex中的数据可以恢复成数据使用。

  * 2.目标页面:从源页面传输到Vuex的数据可以在data中使用。

  * 3.当源页面的数据恢复后,删除Vuex中对应的备份数据和路由上保存的目标页面标识。

  * @param vm {object}需要当前的Vue组件实例。

  */

  $changeVueData: (vm)={

  设TGT params=store . state . TGT pageparams;

  设srcParams=vm。$ store . state . srcpageparams . slice(-1)[0] { };//取最后一个元素值

  设name=vm。$ route.name

  设query=vm。$deepCopyJSON(vm。$ route . query);//这里的深层复制是因为$route.query需要更新

  //确定当前页面是目标页面还是源页面。

  //判断条件首先是路由名称是否一致,然后是指定查询的属性值是否一致。

  设isTgtPage=TGT params . name===name

  (tgtParams.checkKeys?TGT params . check keys . every(key=TGT params . query[key]===query[key]):true);

  设isSrcPage=src params . name===name

  (srcParams.checkKeys?src params . check keys . every(key=src params . query[key]===query[key]):true);

  //如果当前页面是目标页面

  if (isTgtPage) {

  对象分配(vm。$data,TGT params . data { });//将源页面的数据更新为当前页面的data(),以便页面查询。

  }

  //如果当前页面是源页面

  if (isSrcPage) {

  对象分配(vm。$data,src params . data { });//跳转前保存的数据更新为当前页面的data(),以便恢复页面。

  store . commit( popSourcePage );//删除srcPageParams的最后一个数据

  //源页面关联跳转逻辑完成后,清除当前页面路径上的目标页面标识,防止页面刷新问题。

  删除query.tgtPageName

  vm。$router.push({ name,query });

  }

  },

  

返回上一页按钮

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

  //back-button.vue

  模板

  button class= primary-BTN return-BTN v-if= showback BTN @ click= back fn

  I class= return-icon /I { { back text } }

  /按钮

  /模板

  脚本

  导出默认值{

  名称:后退按钮,

  道具:{

  //返回上一页的文本

  背景文本:{

  类型:字符串,

  默认值:()= Previous

  },

  //返回上一页的功能

  backFn: {

  类型:功能,

  默认值:()={}

  }

  },

  data() {

  返回{

  showbacktn:false,

  };

  },

  已安装(){

  this . setbackbtnshow();

  },

  已激活(){

  this . setbackbtnshow();

  },

  方法:{

  //更新按钮的状态以返回上一页

  setBackBtnShow() {

  这个。$nextTick(()={

  让srcPage=this。$ store . state . srcpageparams . slice(-1)[0];

  this . showbacktn=Boolean(src page object . keys(src page))。长度0);

  });

  },

  },

  };

  /脚本

  样式范围的语言=scss

  /风格

  

容错部分

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

  //根组件App.vue

  /* .省略代码.*/

  观察:{

  //听着,当路线改变时。

  $路线(至,自){

  //如果既不是源页面也不是目标页面,则清除Vuex中保存的数据。

  //防止关联跳转过程中切换菜单或其他操作,导致Vuex中上次关联跳转遗留的数据。

  如果(!to.query.srcPageName!to.query.tgtPageName) {

  这个。$ store . commit( clear target page );

  这个。$ store . commit( clear source page );

  }

  },

  },

  /* .省略代码.*/

  

使用示例

  按照上述方案设计部分的步骤:

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

  //page A.vue

  /* .省略代码.*/

  已安装(){

  vm=this

  vm。$ changeVueData(VM);//通过关联跳转到相关页面。每次进入页面,都必须执行$changeVueData函数。具体用法请参考调用方法的注释。

  VM . ready();

  },

  /* .省略代码.*/

  第二步,用下面的代码从页面A跳到页面B:

  //page A.vue

  /* .省略代码.*/

  方法:{

  //跳转到b页。

  goUserSituation:函数(名称){

  让srcParams={

  名称:vm。$route.name,

  查询:vm。$route.query

  };

  让tgtParams={

  名称:“用户情况”,

  数据:{

  检查系统:名称

  }

  };

  vm。$goTargetPage(srcParams,TGT params);

  },

  },

  /* .省略代码.*/

  第三步,进入页面B,代码如下:

  //页面B.vue

  /* .省略代码.*/

  已安装(){

  vm=this

  vm。$ changeVueData(VM);//通过关联跳转到相关页面。每次进入页面,都必须执行$changeVueData函数。具体用法请参考调用方法的注释。

  VM . ready();

  },

  /* .省略代码.*/

  步骤4,返回到页面A,代码如下:

  //页面B.vue

  /* .省略代码.*/

  模板

  差异

  back button:back fn= $ gosource page /back button

  /* .省略代码.*/

  /div

  /模板

  /* .省略代码.*/

  

总结

  本文详细介绍了相关页面多级跳转(页面钻取)功能的实现。核心思想是通过VUEX全局状态管理保存相关跳转源页面和目标页面的数据。在跳转之前,保存所需的数据。跳转到目标页面时,从VUEX获取目标页面所需的数据,跳转回源页面时,从VUEX还原源页面的数据。

  将这些关键动作封装成通用的方法和组件,即统一了各个项目的相关页面跳转方式,也提高了代码质量,更有利于后期维护。另外,文章的容错部分只写了一部分。如果以后需要继续完善这个功能,可以完善容错部分。

  关于Vue实现相关页面多级跳转(页面钻取)功能的这篇文章到此为止。更多关于相关Vue相关页面多级跳转的信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: