首页 > 其他分享 >自己维护vue项目的路由跳转历史记录

自己维护vue项目的路由跳转历史记录

时间:2022-12-01 10:58:38浏览次数:51  
标签:历史记录 vue Vue 跳转 router 路由 History

问题:公司开发一个商城,总是遇到回退到上页面时会有很多逻辑处理,由于每个页面都要写回退的方法,所以总会漏掉一些判断,导致出现很多类似的bug。

所以想到了可能自己封装一下,来维护路由页面跳转应该会更方便一些。

所以开始吧!

 

暂时还没有时间在项目中时间,只是从别人那记录学习一下,一边之后使用。待更新。。。。

学习地址:https://www.cnblogs.com/dora-zc/p/10888071.html


实现一个Vue小插件:

  1. 新建文件src/utils/routerhistory.js,通过堆栈的方式维护页面跳转的历史记录,控制返回跳转。
  2. 点击返回按钮是出栈操作。
  3. 在全局路由router.js中,实例化路由前,通过原型扩展router的back的方法。
  4. 在全局afterEach中存放历史记录。

新建页面

// src/utils/routerhistory.js
 
const History = {
    _history: [], // 历史记录堆栈
    install(Vue) {
        // 提供Vue插件所需安装方法
        Object.defineProperty(Vue.prototype, '$routerHistory', {
            get() {
                return History;
            }
        })
    },
    push(path) { // 入栈
        this._history.push(path);
    },
    pop() {
        this._history.pop();
    },
    canBack(){
        return this._history.length > 1;
    }
 
}
export default History;

在路由实例化之前,扩展back()方法

// src/router.js
 
import Vue from 'vue'
import Router from 'vue-router'
import History from './utils/history';
 
Vue.use(Router);
Vue.use(History);
 
// 实例化之前,扩展Router
Router.prototype.goBack = function () {
  this.isBack = true;
  this.back();
}

 在路由全局afterEach中记录跳转历史

// src/router.js
 
// afterEach记录历史记录
router.afterEach((to, from) => {
  if (router.isBack) {
    // 后退
    History.pop();
    router.isBack = false;
    router.transitionName = 'route-back';
  } else {
    History.push(to.path);
    router.transitionName = 'route-forward';
  }
})

在公用Header组件中使用

// Hearder.vue
 
<template>
  <div class="header">
    <h1>{{title}}</h1>
    <i v-if="$routerHistory.canBack()" @click="back"></i>
    <div class="extend">
      <slot></slot>
    </div>
  </div>
</template>
 
<script>
export default {
  props: {
    title: {
      type: String,
      default: ""
    }
  },
  methods: {
    back() {
      this.$router.goBack();
    }
  }
};
</script>

 

标签:历史记录,vue,Vue,跳转,router,路由,History
From: https://www.cnblogs.com/meiyanstar/p/16940643.html

相关文章

  • 行为管理(锐捷路由篇)
    大家好,我是小杜,不知不觉的已经学习了一个月了,从一个只知道些基础的“菜鸟”到现在的"普鸟",争取尽快进化成“老鸟”。今天继续对相关的行为管理方面的学习,相信以后会经常遇......
  • vue和uni-app的区别有哪些
    vue和uni-app的区别:1、uni-app可以通过打包实现一套代码多端运行,而vue不行;2、uni-app有自动的框架预载,加载页面的速度更快,vue没有;3、uniapp使用小程序的标签,vue使用web端......
  • 行为管理(锐捷路由篇)
    大家好,我是小杜,不知不觉的已经学习了一个月了,从一个只知道些基础的“菜鸟”到现在的"普鸟",争取尽快进化成“老鸟”。今天继续对相关的行为管理方面的学习,相信以......
  • vue中导入monaco-editor
    monaco-editormonaco-editor是一款代码编辑器,使用它我们可以再web实现vscode的基本功能 安装npminstallmonaco-editor添加代码提示这里我只添加......
  • vue 3.0
    1.安装最新vue环境cnpmi-gvue@vue/cli  要确保环境是4.5以上的版本2.创建项目vuecreate(你的项目名称:vue3demo)根据需要选择下面相关组件......
  • 微信小程序开发笔记 - 路由导航
    路由导航目录路由导航1.声明式路由导航1.1声明式后退导航1.2声明式导航传参2.编程式路由导航2.1编程式后退导航2.3编程式导航传参1.声明式路由导航navigator标签......
  • vue基础笔记
    1Vue简介Vue是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。但Web世界是十分多样化的,不同的开发者在Web上构建的东西可能在形式和规模上会有很大......
  • vuecli3项目集成到springboot
    路径配置当springboot中设置项目访问路径server.servlet.context-path=/demovue项目中vue.config.js需配置publicPathmodule.exports={transpileDependenc......
  • Vue2(笔记05) - Vue核心 - 计算属性
    计算属性需求1:两个文本框,输入内容后再合并显示在元素中;插值语法实现:<divid="root">姓:<inputtype="text"v-model:value="firstName"><br>名:<inputtype="text"v-......
  • 记一次vue提交表单blob流后台下载zip文件
    首先vue:data中model:{},方法handleSubmit(e){e.preventDefault()this.form.validateFields((err,values)=>{if(!err){letformData......