最近被问到VueRouter的两种模式的区别,答:Hash模式url上有#号,History模式url上没有#。完!

也不知道这么回答对不对,就看了看资料,发现也就是这个意思吧!

Vue-Router中有两种URL模式,一个是Hash(默认),一个是History模式。

const router = new VueRouter({
mode: 'history',
routes: [{...}]
})

History模式需要后台设置,具体设置请看文档

说说这个#的是什么

1. #的含义

#(Hash)代表网页中的一个位置,右边就是该位置的标识符,2010年twitter第一次将#用到URL中,(这是主流网站第一次大规模的使用),比如:http://www.example.com/index.html#print 就代表网页中index.html的print位置。浏览器读取这个URL后会自动将页面滚动到print这个标识符的位置,在html中指定标识符的方法有两种:
1.使用锚点 <a name="print"></a>
2.使用id属性<div id="print"></div>

2. http请求完全忽略 #

#是用来指示浏览器的动作,对服务器完全无用,所以http请求中没有#,比如访http://www.example.com/index.html#print

GET index.html HTTP/1.1
Host: www.example.com //#print完全被忽略

由于请求将#后的字符完全忽略,但是可以将#转义为%23
例如:http://www.example.com/index.html?color=#fff 改为 http://www.example.com/index.html?color=%23fff

GET index.html?color
GET index.html?color=#fff //转义后
Host: www.example.com

3. 修改#后面的url不会触发网页加载

比如:http://www.example.com/index.html#location1 改为 http://www.example.com/index.html#lcoation2
浏览器不会发起任何请求。

4. 但是改变#会改变浏览器的访问历史

每改变一次#后面的,都会在浏览器的访问历史中增加一个记录,使用倒退按钮可以返回,前进等。这对于Ajax应用程序特别有用,
用不同的#值,代表不同的访问状态,对ie6/7没用,他们不会应为#后的变化而增加历史记录。

5. window.location.hash读取#值

window.location.hash 的值可读可写,读取来判断状态是否改变,写入时可以在不重载网页的前提下,添加一条历史访问记录。

6. onhashchange事件

onhashchange是一个HTML5新增的事件,hash变化时就会触发这个事件
三种事件监听方式:

window.onhashchange = foo
<div onhashchange="foo()">
window.addEventlistener('hashchange',foo,false)

不支持该事件的浏览器可以用setInterval监控location.hash的变化

7. google抓取#的机制

默认情况下google爬虫会忽略URL的#部分,但是如果你希望,Ajax生成的内容可以被爬虫读取,name可以使用#!
google会自动将后面的内容转化成查询字符串_escaped_fragment_的值,即#!?_escaped_fragment_=替换

http://twitter.com/#!/username //转化为
http://twitter.com/?_escaped_fragment_=/username

总结

对URL中的# (Hash)对照阮一峰老师的博客 做了个简单总结,后期要对history等关键知识进行一下总结,先插个旗。

转:https://www.jianshu.com/p/a658c576dd7b

Vue-Router的Hash说起的URL相关知识的更多相关文章

  1. C#url相关知识

    C#中Url地址重定向的方法: 1:Response.Redirect(url); 这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳转到任何页面,没有站点页面限 ...

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

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

  3. Vue Router 路由实现原理

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

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

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

  5. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

  6. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制

    一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...

  7. Vue躬行记(8)——Vue Router

    虽然Vue.js未提供路由功能,但是官方推出了Vue Router(即vue-router库),以插件的形式支持.它与Vue.js深度集成,可快速的创建单页应用(Single Page Applica ...

  8. 8. Vue - Router

    一.Vue Router 的使用 JavaScript: 1.创建组件:创建单页面应用需要渲染的组件 2.创建路由:创建VueRouter实例 3.映射路由:调用VueRouter实例的map方法 4 ...

  9. 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)

    大家好,今天的内容,我将和大家一起聊聊 Vue 路由相关的知识,如果你以前做过服务端相关的开发,那你一定会对程序的URL结构有所了解,我没记错的话也是路由映射的概念,需要进行配置. 其实前端这些框架的 ...

随机推荐

  1. Eureka中的核心概念

    图片的链接出了一点小bug,导致图片不能正常访问,小伙伴们可以移步这里:https://mp.weixin.qq.com/s/kAqOTKUt_qPlxzI4aGS5Pw 本文是Spring Clou ...

  2. Android Studio 获取数字签名

    下面介绍下调试版本和发布版本,获取数字签名的方法,通过以下方法可以获取到SHA1和MD5 1.调试版本 在调试模式下,Android studio会默认生成一个debug.keystore签名文件,因 ...

  3. hdu:2030.汉字统计

    Problem Description 统计给定文本文件中汉字的个数.   Input 输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本.   Output 对于每一段文本,输出其中的汉 ...

  4. glusterfs+heketi为k8s提供共享存储

    背景 近来在研究k8s,学习到pv.pvc .storageclass的时候,自己捣腾的时候使用nfs手工提供pv的方式,看到官方文档大量文档都是使用storageclass来定义一个后端存储服务, ...

  5. ES6躬行记(14)——函数

    在前面的章节中,已陆陆续续介绍了ES6为改良函数而引入的几个新特性,本章将会继续讲解ES6对函数的其余改进,包括默认参数.元属性.块级函数和箭头函数等. 一.默认参数 在ES5时代,只能在函数体中定义 ...

  6. 如何解决svn清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇到错误怎么办

    平时使用svn的过程中,有的时候由于自己操作故障或者系统原因,导致svn不能更新,提示cleanup也不能成功,陷入了死循环 原因是;svn的数据库队列原因 1,下载sqlite3.exe,googl ...

  7. httpclient+jsoup实现小说线上采集阅读

    前言 用过老版本UC看小说的同学都知道,当年版权问题比较松懈,我们可以再UC搜索不同来源的小说,并且阅读,那么它是怎么做的呢?下面让我们自己实现一个小说线上采集阅读.(说明:仅用于技术学习.研究) 看 ...

  8. C# /VB.NET操作Word批注(一)—— 插入、修改、删除Word批注

    批注内容可以是对某段文字或内容的注释,也可以是对文段中心思想的概括提要,或者是对文章内容的评判.疑问,以及在阅读时给自己或他人起到提示作用.本篇文章中将介绍如何在C#中操作Word批注,主要包含以下要 ...

  9. jQuery.Ajax IE8,9 无效(CORS跨域)

    今天在开发网站的时候,发现一个问题,$.ajax()在 IE8,9 浏览器不起作用,但 Chrome,Firefox ,360,IE10以上等浏览器却是可以的,网上资料很多,查询最后发现是 IE8,9 ...

  10. vue element-ui 2.3.4版本 input number值为0时 显示不出来

    解决:官方修复了这个bug.升级element-ui为2.3.5版本就好了