Vue Router предоставляет мощные возможности для управления маршрутизацией в одностраничных приложениях (SPA), используя History API браузера. Этот подход позволяет изменять URL без полной перезагрузки страницы, обеспечивая более плавный пользовательский опыт и возможность использовать навигацию назад и вперед, встроенную в браузер.
Vue Router поддерживает два ключевых режима работы с URL:
hash mode – использует символ # в
URL. Пример: http://example.com/#/home.
#, что может быть нежелательно для
SEO.history mode – использует History
API браузера. Пример: http://example.com/home.
#.index.html.pushState,
replaceState и реагировать на popstate
событие.При создании экземпляра роутера в Vue 3 применяется функция
createWebHistory:
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;
Пояснения:
createWebHistory() — создает объект истории на базе
History API.router.push()Используется для программного перехода на новый маршрут:
router.push('/about');
router.push({ name: 'home' });
router.push({ path: '/about', query: { ref: 'newsletter' } });
path,
name, query и params.router.replace()Переход без добавления нового элемента в историю:
router.replace('/login');
router.go()Позволяет перемещаться по истории браузера:
router.go(-1); // назад
router.go(1); // вперед
window.history.go().Vue Router в режиме history автоматически обрабатывает
событие popstate, вызываемое при навигации кнопками
браузера. Это гарантирует синхронизацию состояния приложения и URL.
Для ручной обработки событий можно использовать глобальные охранники маршрутов:
router.beforeEach((to, from, next) => {
console.log(`Переход с ${from.fullPath} на ${to.fullPath}`);
next();
});
History API поддерживает любые URL-параметры:
const routes = [
{ path: '/user/:id', component: User }
];
:id доступен через
to.params.id./user/123?tab=posts доступны через
to.query.tab.Программная навигация с параметрами:
router.push({ path: `/user/${userId}`, query: { tab: 'settings' } });
При использовании чистых URL в режиме history сервер
должен перенаправлять все маршруты на index.html:
Пример для Nginx:
location / {
try_files $uri $uri/ /index.html;
}
Пример для Apache (.htaccess):
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
/about выдаст 404, если сервер не
перенаправляет на главный HTML-файл.#.push и
replace для динамических переходов.