Vue路由回退的完美解决方案(vue-route-manager)

目录
  • 路由管理器
  • 背景
  • 入门
  • 解决问题
  • Methods
  • 总结

路由管理器

记录每次跳转的vue-route name, 内置了一些处理回退的方法, 方便回退到指定页面

背景

笔者所开发的项目中经常遇到各种花式跳转, 例如从引导页的选择操作到最后的提交审核中间会经过无数页面, 甚至中间所做的操作不同也会导致最后回退深度不同

假设项目中 起始点都是选择页, 最终都会抵达提交页 并且都会返回到最初的页面(选择页)

选择页 --> B --> C --> 提交页
 情况一 从选择到提交 中间经历了 B、C, 这时候返回 A 需要调用router.go(-3)
 ----------------------------------------
 ​
 选择页 --> B-1 ------> 提交页
 情况二 从选择到提交 只经历了 B-1 , 这时候 go(-3) 不再适用, 此时可能会增加查询参数(渠道id)来区分第二种情况
 ----------------------------------------
 ​
 选择页 --> B-2 --> C-2 -->C-2-1 --> 提交页
 这种情况 又会发现不仅 go(-3) 不适用, 查询参数还得多加一种类型, 如果后续还需要区分更多渠道, 可想而知啊...

此时可以使用RouteManager插件来处理这一系列复杂的问题

入门

 npm i vue-route-manager -S
 import Vue from 'vue'
 ​
 // 引入 路由管理器
 import VueRouteManager from 'vue-route-manager'
 ​
 // 并将其挂载到 Vue 上
 Vue.use(VueRouteManager, { /* ...ManagerOptions */ })
 ​
 // 此时在页面中可以用 this.$RouteManager 来访问管理器

ManagerOptions参数说明

参数名 类型 必须 描述
router VueRouter Y VueRouter对象
debug Boolean N 是否开启调试

示例

Home 页

路由信息 { path: '/home', name: 'home', component: Home }

 <template>
     <button @click="jump">下一页</button>
 </template>
 <script>
 exprot default {
    methods: {
       jump(){
          // 记录首页的 name
          this.$RouteManager.setHome('home')
          this.$router.push({ name: 'page-1' })
       }
    }
 }
 </script>

Page-1 页

路由信息 { path: '/page_1', name: 'page-1', component: Page-1 }

 <template>
     <div class="page-1">
         page-1
         <button @click="$router.push({ name: 'page-2' })">下一页</button>
         <button @click="$router.replace({ name: 'page-1' })">重定向</button>
     </div>
 </template>

Page-2 页

路由信息 { path: '/page_2', name: 'page-2', component: Page-2 }

 <template>
     <div class="page-2">
         page-2
         <button @click="$router.push({ name: 'page-3' })">下一页</button>
         <button @click="backToHome">返回首页</button>
     </div>
 </template>
 <script>
 exprot default {
    methods: {
       backToHome(){
          // 调用 backHome 来返回到最开始记录的 home 页
          this.$RouteManager.backHome()
       }
    }
 }
 </script>

Page-3 页

路由信息 { path: '/page_3', name: 'page-3', component: Page-3 }

 <template>
   <div class="page-3">
     page-3
     <button @click="$backToHome">返回首页</button>
     <button @click="backToPage">返回 page-1</button>
   </div>
 </template>
 exprot default {
    methods: {
       backToPage(){
          // 调用 backByName 来返回到指定页(必须经历过此页面)
          this.$RouteManager.backByName('page-1')
       },
         backToHome(){
          // 调用 backHome 来返回到最开始记录的 home 页
          this.$RouteManager.backHome()
       }
    }
 }
 </script>

解决问题

A --> B --> C --> D --返回-> A // 情况一
  |--> B-1 ------> D --返回-> A // 情况二
  |--> B-2 --> C-2 -->C-2-1 --> D --返回-> A // 情况三

首先在A页面调用this.$RouteManager.setHome('page-A')或者this.$RouteManager.setHome()

接着B页面需要返回的时候调用this.$RouteManager.backHome()即可

Methods

setHome([name])

  • name

    • Type: String
    • name所指路由列表当中的 name { path: '/page_3', name: 'page-3', component: Page-3 }
    • Default: 当前路由的name

设置需要最终返回的页面路由name

backHome()

回退到home页, 通过setHome来设置home

backByName(name)

  • name

    • Type: String
    • name所指路由列表当中的 name { path: '/page_3', name: 'page-3', component: Page-3 }

回退到指定name的页面

总结

到此这篇关于Vue路由回退的完美解决方案vue-route-manager的文章就介绍到这了,更多相关Vue路由回退内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在vue中实现禁止回退上一步,路由不存历史记录

    在有些情况下,我们不想往路由里添加历史记录.(vue的项目,vue-router中不想存历史记录) 根据vue官网提供的,楼主总结了一下,主要有以下几种方案: 根据官网的解释 .声明式路由和编程式路由都是添加新的记录,同时vue还提供了replace来替换路由记录,从而实现路由不存历史记录的情况,以下是楼主总结的几种方法: 1.声明式路由 2.编程式 3.原生js实现 楼主晚上回去看了一下<js高程>,原生实现替换路由,不记录历史记录的方法 window.open("http://w

  • Vue路由回退的完美解决方案(vue-route-manager)

    目录 路由管理器 背景 入门 解决问题 Methods 总结 路由管理器 记录每次跳转的vue-route name, 内置了一些处理回退的方法, 方便回退到指定页面 背景 笔者所开发的项目中经常遇到各种花式跳转, 例如从引导页的选择操作到最后的提交审核中间会经过无数页面, 甚至中间所做的操作不同也会导致最后回退深度不同 假设项目中 起始点都是选择页, 最终都会抵达提交页 并且都会返回到最初的页面(选择页) 选择页 --> B --> C --> 提交页  情况一 从选择到提交 中间经历

  • vue权限问题的完美解决方案

    前言 最近一直在忙着一个用vue来做的权限管理的项目,其实在此之前,我也研究过vue的权限如何实现,并且也为之写过一篇博客,但当真正应用在项目中的时候,还是发现了许多问题,所以此篇也会就着我在项目中遇到的一些问题,拿出来和大家分享一下,当然示例代码还是我的github仓库中的ant-design-vue-ms (本地下载). 权限问题解决思路 对于一个前后端分离的项目而言,权限不再是仅仅靠后端来控制,后端只能控制接口的权限,前台的页面显示还是需要我们来控制,针对vue的项目,首先我想的是当权限不

  • 双路由上网的完美解决方案 原创

    前些天有个朋友让我帮他设置下.从路由lan口接下来的线,而他又要用路由再接3台电脑,我原来直接将从第一个路由连的线接在第二个路由的wan口,怎么也不能上网,知道的告诉一下啊,我的解决办法:第一个路由连的线接在第二个路由的Lan口上,假如第一个路由的ip为192.168.1.1则设置第二个路由的ip为192.168.1.99,然后本地网卡的ip地址为192.168.1.100,注意了最好将路由器的DHCP功能关掉,这样网速也可快点缺点:只能连三台电脑另附上从网上找来的其它方法,大家可以参考下下面的

  • Vue路由传递参数与重定向的使用方法总结

    目录 前言 概念 1.vue路由传参 2.vue路由重定向 实际使用场景 路由传参 1.使用步骤 2.params传参 2-1.路由属性配置参数 3.query传参 4.url字符串拼接 5.接收路由参数的方法,分 ? 和 : 两种接收方式 6.路由传参的示例 路由重定向 1.路由重定向语法 2.实际示例 其他 拓展 最后 前言 前端开发过程中,作为前端开发者来说关于vue的使用并不陌生,vue相关常用的知识点也是非常重要的,不管是在实际开发中还是在求职面试中都很重要.在vue使用中,路由相关的

  • Vue路由this.route.push跳转页面不刷新的解决方案

    Vue路由this.route.push跳转页面不刷新 一.背景 介绍:在vue项目开发中,使用路由进行页面跳转时,路由所跳转的页面不进行刷新. 也就是vue生命周期函数没有执行(created.mounted钩子函数). 案例: A页面: B页面: 问题: 当在A页面第一点击按钮到B页面时,一切正常,当返回到A页面再次点击按钮时,B页面没有执行mounted钩子函数,结果导致mounted函数中查询方法不执行. 二.解决方法: 1.使用activated:{}周期函数代替mounted:{}函

  • Vue路由对象属性 .meta $route.matched详解

    $route.fullPath 1 路由是:/path/:type真正路径是:/path/list 2 path匹配路径: /path/list 3 fullPath匹配路由: /path/:type 路由元信息 .meta const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, children: [ { path: 'bar', component: Bar, // a meta field meta:

  • vue 页面回退mounted函数不执行的解决方案

    前言 最近做项目碰到一个很头大的问题--从a页面跳到b页面进行编辑,编辑完再返回a页面,却没走a页面的钩子函数mounted,数据没有更新 经过一番面向百度研究,终于找到了问题所在.接下来就记录一下这个问题及其解决的方法. 原理 其实这个问题主要涉及到vue生命周期,对vue生命周期理解不够深刻的同学可以去官网学习一下:https://vuejs.org/v2/api/#Options-Lifecycle-Hooks 解决这个问题的关键就在于对keep-alive的理解和activated钩子函

  • vue项目打包部署后默认路由不正确的解决方案

    目录 打包部署后默认路由不正确 问题描述 解决方案 vue打包后路径不对 对于背景图片不显示的问题 动画无法运行 小图标没了 打包部署后默认路由不正确 问题描述 vue项目本地开发的时候默认路由没问题,例如 redirect:"/index" 但是部署以后,服务器上默认路由不正确,现在遇到的问题是,会默认跳转到login页面,前提项目没有做路由权限. 解决方案 打开路由index.js文件,添加:base:"/" const routers = new Router

  • Vue路由传参页面刷新后参数丢失原因和解决办法

    目录 vue路由传参方法 原因分析: 解决方案: 总结 vue路由传参方法 在编写vue项目时,时常会使用路由在不同页面中传递参数,常见使用方式如下: this.$router.push({ path: "/test", query: { a: 1, b: 2 } }) 这样我们就传递了两个参数,在 /test  页面 就可以接收这两个参数 let a = this.$route.query.a; let b = this.$route.query.b; 可以看到浏览器进行了url参数

  • 解决vue 路由变化页面数据不刷新的问题

    每天记录一点点,把我遇到的问题记录下来, 希望可以帮助到更多和我遇到同样问题的人. 问题描述:通过调接口,动态显示帮助页面的问题列表, 问题列表有多级,当点击的这个问题没有下一级问题的时候跳入内容页. 问题出在,我在电脑上做移动端页面的时候,相继跳到详情页,我想返回,点击 按钮,直接跳转到了如上第一张图的样子,no,no,no,这不是我想要的结果,此刻,想到了通过改变url来改变页面的层级问题. 一级的parent为0,默认不显示或显示. 二级的parent为1,点击一级路由变为如图: 点击进入

随机推荐