最近做的项目中,涉及vue router 路由操作,其操作方法不同,产生的行为亦不同。本文通过对比实验,对其行为进行实验对比及总结,避免混淆。
vue router的单页跳转的history模式,类似HTML5 history方式,两者使用的API类似。 

1、测试介绍

1.1、测试分两种跳转方式

a、单页 <-> 单页:单页内的跳转(通过vue router的方式跳转);
b、单页 <-> 普通页:单页到普通页面的跳转(或者通过href、window.location的方式跳单页)。

1.2、测试点

a、 router对应组件是否重新执行;
b、页面是否刷新。

1.3、用户操作

a、点击页内路由;
b、操作浏览器回退按钮。
 

2、测试

2.1、测试点用例设置

a、测试点a:组件是否重新执行
created() {
console.log('reload error ', testObj.pageName)
testObj.pageName = 'error'
}
在对应组件的created生命周期中输出信息,如果有信息输出,路由对应组件得到执行。
 
b、测试点b:是否刷新
在入口文件.html 中,设置变量var testObj = { pageName: 'init’},在跳转过程中,如果pageName的值非’init’,那么testObj变量在内存中得以保存,页面未刷新。
 

2.2、跳转方式用例设置

a、单页 <-> 单页
创建两个单页路由test1、test2,用于测试单页<—>单页的情况
          如下:
<router-link :to="{ name: 'test2'}">跳转</router-link>
<router-link :to="{ name: 'test1'}">跳转</router-link>
{
path: '/test',
component: App,
children: [{
path: 'my1',
component: test1,
name: 'test1',
meta: {
title: 'myTest1'
}
},
{
path: 'my2',
component: test2,
name: 'test2',
meta: {
title: 'myTest2'
}
}]
}
  预期:
a、router对应组件重新执行;
b、页面不刷新。
测试console结果:
reload 404  init
reload error  404
reload 404  error
reload error  404
结论:每次跳转,created生命周期中的代码都执行,说明组件重新执行,a点符合预期;created除第一刷新页面进来为’init’外,其他都为非’init’,说明跳转过程中变量存在内存中,页面未刷新,b点符合预期。
        
b、单页 <-> 普通页
<a href="http://10.10.11.182:8085/test/my2">外跳转</a>
window.location = 'http://10.10.11.182:8085/test/my2'
预期:页面直接刷新。
测试console结果:
        reload 404  init
// 外页
reload 404  init
结论:页面刷新,符合预期。
以上为操作页内路由跳转的测试结论,操作回退按钮[本实验使用chrome浏览器]的结论如下:
使用单页路由跳转形成的history(单页<->单页),操作浏览器回退按钮的行为与页内跳转的行为一致,未刷新页面,而是对应组件重新执行。
而通过href、window.location跳转的页面(单页<->普通页),操作浏览器回退按钮的行为与形成history行为一致,始终刷新页面。
 
总结:单页内跳转,产生的history变化,使得对应组件重新执行,但不刷新页面;但,使用href、window.location进行跳转,产生的history变化,将使得页面重新刷新。 
 
以上为浏览器在vue router 和 window.location、href 下产生的跳转行为表现,那么这些跳转背后的实质是什么呢?
了解其实质,就需要了解浏览器对window.location、href、history API 的设定,它们产生的原因和原理,下一篇将说明其背后的原理:window.history的跳转实质-HTML5 history API 解析

vue router的浏览器跳转行为的更多相关文章

  1. 10.vue router 带参数跳转

    vue router 带参数跳转 发送:this.$router.push({path:'/news',query:{id:row.id}}) 接收:var id=this.$route.query. ...

  2. Vue Router实现页面跳转拦截

    场景: 某些页面需要登录之后才可以访问,在页面跳转前做处理,如果要访问的页面A需要登录,则强制调到登录页,并且记录要访问的页面A的链接,在登录成功后自动跳转到页面A 1.在router下的index. ...

  3. vue router 跳转到新的窗口方法

    在CreateSendView2.vue 组件中的方法定义点击事件,vue router 跳转新的窗口通过采用如下的方法可以实现传递参数跳转相应的页面goEditor: function (index ...

  4. Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转

    问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...

  5. Vue.js 2.x笔记:路由Vue Router(6)

    1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...

  6. Vue Router 路由实现原理

    一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash  ...

  7. vue router.push(),router.replace(),router.go()和router.replace后需要返回两次的问题

    转载:https://www.cnblogs.com/lwwen/p/7245083.html https://blog.csdn.net/qq_15385627/article/details/83 ...

  8. 解决vue单页路由跳转后scrollTop的问题

    作为vue的初级使用者,在开发过程中遇到的坑太多了.在看页面的时候发现了页面滚动的问题,当一个页面滚动了,点击页面上的路由调到下一个页面时,跳转后的页面也是滚动的,滚动条并不是在页面的顶部 在我们写路 ...

  9. 深入浅出的webpack构建工具--webpack4+vue+router项目架构(十四)

    阅读目录 一:vue-router是什么? 二:vue-router的实现原理 三:vue-router使用及代码配置 四:理解vue设置路由导航的两种方法. 五:理解动态路由和命名视图 六:理解嵌套 ...

随机推荐

  1. SSH登录警告(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)

    在配置本机与docker容器实现ssh无密码访问时出现以下报错 # federico @ linux in ~ [18:35:52] C:127$ sudo ssh-copy-id -i .ssh/i ...

  2. sun.jersey使用Jackson转换数据

    差点被com.sun.jersey自身的json转换吓死,遇到List等类型,会把这些也转换为json对象,而不是jsonarray. 被园里的同行拯救了,在web.xml中配置一下就ok. < ...

  3. MVC批量上传文件

    初始图片: 选中图片后 ---------------------------------------------------------------------------------- 前端代码 ...

  4. STM32的时钟配置随笔

    以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...

  5. 2D Circular Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual

    1 Introduction The goal of the circular kernel is to offer to the user a large set of functionalitie ...

  6. Java开发 小工具累计

    array to list Integer[] spam = new Integer[] { 1, 2, 3 }; List<Integer> rlt = Arrays.asList(sp ...

  7. [Xamarin]我的Xamarin填坑之旅(一)

    一想到明天是星期五,不对,是今天,心里就很激动,毕竟明天没课.激动之余,来写一篇博客,记录一下最近踏坑Xamarin开发校园助手APP的一些事儿.也许更像是一篇流水账. 在扯Xamarin之前,有必要 ...

  8. 四两拨千斤式的攻击!如何应对Memcache服务器漏洞所带来的DDoS攻击?

    本文由  网易云发布. 近日,媒体曝光Memcache服务器一个漏洞,犯罪分子可利用Memcache服务器通过非常少的计算资源发动超大规模的DDoS攻击.该漏洞是Memcache开发人员对UDP协议支 ...

  9. Spring 开发第一步(三)Spring与JDBC

    <spring in action 3rd>中的前面4章讲解的是Spring的核心,也就是DI/IOC和AOP .从第5章开始是Spring在企业开发中的各个方面的应用.其实作为笔者从事的 ...

  10. Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用

    关于paramiko: SSH SFTP 机器上没有安装该模块,只是初步了解了下,没有细细研究. 可能以后只有做运维的才能用到的吧 利用秘钥,在ssh中不输入用户名密码进行登录 利用秘钥进行FTP操作 ...