Vue中的历史模式和哈希模式是两种不同的路由模式。
- 哈希模式(Hash Mode):默认情况下,Vue使用哈希模式来处理路由。在哈希模式下,URL的hash部分(即#后面的内容)会被用来作为路由路径,当URL的hash发生变化时,Vue会根据hash来匹配对应的路由,并渲染相应的组件。例如,
http://example.com/#/home
中的#/home
就是哈希路由路径。
优点:哈希模式在浏览器兼容性方面有较好的支持,能够兼容大部分浏览器。
缺点:哈希路由路径看起来不太美观,而且如果URL中有多个哈希(例如http://example.com/#/home#section1
),则只有第一个哈希会被用来作为路由路径。
- 历史模式(History Mode):历史模式使用浏览器的
history.pushState
和history.replaceState
方法来修改URL,因此在历史模式下,URL看起来更加直观和美观。例如,http://example.com/home
就是历史路由路径。需要注意的是,历史模式需要服务器的支持,在服务端配置了路由后,任何路径都会返回同一个HTML页面,因此在刷新页面或直接访问特定URL时,服务器需要返回正确的页面。
优点:历史模式的URL直观美观,更接近传统的URL路径。
缺点:历史模式在浏览器兼容性方面有一些限制,例如在IE9及以下版本中不支持。另外,使用历史模式需要服务器的支持,否则在刷新页面或直接访问特定URL时会出现404错误。
底层原理:无论是历史模式还是哈希模式,实质上都是通过监听浏览器的URL变化来匹配路由并渲染相应的组件。在哈希模式下,监听的是window.onhashchange
事件;在历史模式下,监听的是window.onpopstate
事件。当URL发生变化时,Vue根据实际情况进行匹配,并执行相应的操作。