Vue.js中该如何自己维护路由跳转记录


Posted in Javascript onMay 19, 2019

前言

在Vue的项目中,如果我们想要做返回、回退操作时,一般会调用router.go(n)这个api,但是实际操作中,使用这个api有风险,就是会让用户跳出当前应用,因为它记录的是浏览器的访问记录,而不是你当前应用的访问记录,这是非常可怕的事情。

解决方案就是,我们自己来维护一份history跳转记录。

案例与使用场景

代码地址:https://github.com/dora-zc/mini-vue-mall (本地下载)

这是一个基于Vue.js的小型商城案例,应用场景:

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

代码实现

实现history插件,维护历史记录

// src/utils/history.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>

完整代码请查看:https://github.com/dora-zc/mini-vue-mall(本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript实现的DES加密示例
Oct 30 Javascript
js实现图片无缝滚动特效
Mar 19 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
vue2的todolist入门小项目的详细解析
May 11 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
微信小程序获取用户openid的实现
Dec 24 Javascript
React中this丢失的四种解决方法
Mar 12 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
javascript的delete运算符知识点总结
Nov 19 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
使用React代码动态生成栅格布局的方法
May 24 Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 #Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 #Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 #Javascript
vue+高德地图写地图选址组件的方法
May 18 #Javascript
微信小程序实现搜索功能并跳转搜索结果页面
May 18 #Javascript
js实现图片推拉门效果代码实例
May 18 #Javascript
微信小程序代码上传、审核发布小程序
May 18 #Javascript
You might like
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python模拟登陆实现代码
2017/06/14 Python
人机交互程序 python实现人机对话
2017/11/14 Python
Python3.6简单反射操作示例
2018/06/14 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
thinkphp5 路由分发原理
2021/03/18 PHP
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
北大自主招生自荐信
2013/10/19 职场文书
人事经理岗位职责
2014/04/28 职场文书
书香校园建设方案
2014/05/02 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书