历史模式
Hash 模式
hash 模式是用 createWebHashHistory() 创建的:
ts
import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({
history: createWebHashHistory(),
routes: [
//...
],
})它在内部传递的实际 URL 之前使用了一个井号(#)。由于这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有不好的影响。如果你担心这个问题,可以使用 HTML5 模式。
Memory 模式
Memory 模式(内存模式)是一种不依赖浏览器地址栏 URL 的路由模式,所有路由记录都保存在 浏览器内存中,不会修改或读取浏览器地址。
ts
import { createRouter, createMemoryHistory } from 'vue-router'
const router = createRouter({
history: createMemoryHistory(),
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About },
],
})| 特性 | 说明 |
|---|---|
| 🚫 不修改 URL | 页面地址栏不会变化(比如不会出现 /about)。 |
| 🧍 不自动导航 | 创建时不会自动根据当前 URL 导航,需要手动 push。 |
| 🧱 没有浏览器历史 | 因为不在浏览器中,无法前进/后退。 |
| ⚙️ 适用于 SSR | 常用在 Node.js 服务器渲染 (SSR) 场景下。 |
| 🧪 可用于测试 | 在单元测试中也很常见,因为不需要依赖浏览器环境。 |
HTML5 模式
用 createWebHistory() 创建 HTML5 模式,推荐使用这个模式:
ts
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [
//...
],
})当使用这种历史模式时,URL 会看起来很 "正常",例如 https://example.com/user/id。漂亮!
不过,问题来了。由于我们的应用是一个单页的客户端应用,如果没有适当的服务器配置,用户在浏览器中直接访问 https://example.com/user/id,就会得到一个 404 错误。这就尴尬了。
不用担心:要解决这个问题,你需要做的就是在你的服务器上添加一个简单的回退路由。如果 URL 不匹配任何静态资源,它应提供与你的应用程序中的 index.html 相同的页面。漂亮依旧!
服务器配置示例
https://router.vuejs.org/zh/guide/essentials/history-mode.html
