Vue Router предоставляет два основных режима маршрутизации:
history и hash. Режим
hash является базовым и широко используемым вариантом
для реализации маршрутизации в одностраничных приложениях (SPA).
Основная идея заключается в том, что URL после символа #
используется для управления состоянием приложения, при этом браузер не
отправляет дополнительные запросы на сервер.
В режиме hash браузер использует часть URL, называемую hash fragment:
https://example.com/#/home
#, не отправляется на
сервер.Механизм реализован через событие hashchange, которое
браузер генерирует каждый раз при изменении фрагмента URL. Vue Router
автоматически подписывается на это событие и обновляет текущий
маршрут.
Для использования hash-маршрутизации необходимо указать
mode: 'hash' при создании экземпляра
VueRouter:
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;
Ключевые моменты:
createWebHashHistory() создаёт историю на основе
hash.#, за которым следует
маршрут.| Характеристика | Hash | History |
|---|---|---|
| URL | /#/route |
/route |
| Поддержка браузеров | Любой, включая старые | Современные (HTML5) |
| Требования к серверу | Нет дополнительных настроек | Необходима настройка серверного перенаправления на index.html |
| SEO | Ограниченные возможности | Лучшее индексирование |
Hash-маршрутизация проще в настройке, но менее привлекательна для SEO и визуально выглядит менее “чисто”.
Vue Router предоставляет несколько способов навигации:
router.push:this.$router.push('/about');
<router-link>:<router-link to="/about">О нас</router-link>
В режиме hash ссылки автоматически преобразуются в формат
/#/about.
Hash-маршруты поддерживают динамические сегменты и параметры:
const routes = [
{ path: '/user/:id', component: User }
];
/#/user/42this.$route.params.id:export default {
mounted() {
console.log(this.$route.params.id);
}
};
this.$route.query:// URL: /#/search?query=vue
console.log(this.$route.query.query); // 'vue'
Vue Router позволяет программно управлять текущим hash:
router.replace('/home'); // заменяет текущий маршрут без добавления в историю
router.go(-1); // переход на предыдущий маршрут
push добавляет запись в историю браузера.replace заменяет текущую запись без изменения
истории.go(n) позволяет перемещаться по истории на
n шагов.// main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
createApp(App)
.use(router)
.mount('#app');
// router.js
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 },
{ path: '/user/:id', component: () => import('./components/User.vue') }
];
export default createRouter({
history: createWebHashHistory(),
routes
});
/#//#/about/#/user/123Режим hash обеспечивает:
Он идеально подходит для приложений, где важна простота установки и работа на статическом хостинге.