Vue Router предоставляет два основных режима работы с маршрутизацией: hash и history. Каждый из них определяет способ управления URL и взаимодействия с браузером, что напрямую влияет на поведение приложения и поддержку серверной части.
Hash-режим использует символ # в URL
для разделения клиентской части маршрута от адреса сервера.
Например:
http://example.com/#/about
Особенности hash-режима:
# обрабатываются исключительно на
стороне клиента.#, что
упрощает настройку серверной части.Настройка hash-режима:
import { createRouter, createWebHashHistory } from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHashHistory(),
routes
});
export default router;
Преимущества hash-режима:
Недостатки:
History-режим использует HTML5 History
API, позволяя создавать чистые URL без символа #.
Пример:
http://example.com/about
Особенности history-режима:
pushState и
replaceState для управления историей браузера.index.html приложения.Настройка history-режима:
import { createRouter, createWebHistory } from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;
Особенности работы на сервере:
index.html.Преимущества history-режима:
Недостатки:
| Характеристика | Hash-режим | History-режим |
|---|---|---|
| URL | example.com/#/about |
example.com/about |
| Поддержка старых браузеров | Полная | Ограниченная |
| Настройка сервера | Не требуется | Требуется перенаправление |
| SEO | Плохо | Хорошо |
| Внешний вид URL | Менее эстетично | Чистый |
Оба режима поддерживают методы $router.push,
$router.replace и router.go:
// Перенаправление на другой маршрут
this.$router.push('/about');
// Замена текущего маршрута без добавления в историю
this.$router.replace('/contact');
// Переход на предыдущий маршрут
this.$router.go(-1);
Эти методы работают идентично в hash и history, различие проявляется только в формате URL и взаимодействии с сервером.
Vue Router позволяет отслеживать события навигации независимо от режима:
router.beforeEach((to, from, next) => {
console.log(`Переход с ${from.fullPath} на ${to.fullPath}`);
next();
});
router.afterEach((to, from) => {
console.log(`Переход завершен на ${to.fullPath}`);
});
В hash-режиме события триггерятся при изменении хэша, в history-режиме — при использовании History API.