Глобальные хуки afterEach предназначены
для выполнения действий после каждого успешного перехода маршрута. Они
предоставляют возможность реагировать на изменение маршрута, не
вмешиваясь в процесс навигации и не блокируя его, поскольку
afterEach не может отменять переход.
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
});
// Глобальный хук afterEach
router.afterEach((to, from) => {
console.log(`Переход с ${from.fullPath} на ${to.fullPath} завершён`);
});
export default router;
to — объект маршрута назначения, который содержит
информацию о новом пути, параметрах, имени маршрута и
query-параметрах.from — объект маршрута, с которого происходит
переход.afterEach не принимает next() и не может
прервать навигацию, в отличие от beforeEach.Глобальные хуки afterEach используются для:
Пример интеграции с аналитикой:
router.afterEach((to) => {
if (window.gtag) {
window.gtag('config', 'UA-XXXXXX', {
page_path: to.fullPath,
});
}
});
Не блокирует навигацию Любой код внутри
afterEach выполняется после завершения навигации, и
отменить её невозможно.
Доступ к параметрам маршрута
to.params и from.params позволяют
анализировать переданные параметры. Например:
router.afterEach((to, from) => {
if (to.params.userId) {
console.log(`Перешли на страницу пользователя с ID: ${to.params.userId}`);
}
});
afterEach
можно вызывать асинхронные функции, однако они не задерживают
переход:router.afterEach(async (to) => {
await fetch('/api/log', {
method: 'POST',
body: JSON.stringify({ path: to.fullPath }),
});
});
afterEach
выполняется после всех beforeEach,
beforeResolve и локальных хуков компонентов. Порядок
выполнения гарантирован и позволяет использовать afterEach
для финальных действий после навигации.afterEach, чтобы исключить дублирование кода в
компонентах.import NProgress from 'nprogress';
router.beforeEach(() => {
NProgress.start();
});
router.afterEach(() => {
NProgress.done();
});
Такой подход позволяет визуально показать пользователю процесс загрузки страницы без вмешательства в сам переход маршрута.
next().meta, query и params.Глобальные хуки afterEach обеспечивают безопасное
выполнение побочных эффектов после навигации, помогают логировать
действия пользователей, управлять индикаторами загрузки и
интегрироваться с аналитическими системами. Их основное преимущество —
возможность выполнять действия после перехода, не вмешиваясь в сам
процесс маршрутизации.