router的hash模式和history模式
vue-router的hash模式是默认模式,history模式利用了history.pushState。
1.hash模式和history模式的区别
-
hash —— 即地址栏 URL 中的
#
符号(此 hash 不是密码学里的散列运算)。比如这个 URL:http://www.abc.com/#/hello
,hash 的值为#/hello
。它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。 -
history —— 利用了 HTML5 History Interface 中新增的
pushState()
和replaceState()
方法。(需要特定浏览器支持)这两个方法应用于浏览器的历史记录栈,在当前已有的back
、forward
、go
的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。
2.pushState的使用
pushState()
设置的新 URL 可以是与当前 URL 同源的任意 URL;而 hash
只可修改 #
后面的部分,因此只能设置与当前 URL 同文档的 URL;
pushState()
设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中;而 hash
设置的新值必须与原来不一样才会触发动作将记录添加到栈中;
pushState()
通过 stateObject
参数可以添加任意类型的数据到记录中;而 hash
只可添加短字符串;
pushState()
可额外设置 title
属性供后续使用。
3.项目的router模式修改