Vue Router предоставляет гибкую систему плагинов, которая позволяет расширять стандартное поведение маршрутизатора. Плагин — это объект или функция, которая получает доступ к экземпляру маршрутизатора и может модифицировать его методы, добавлять глобальные хуки или интегрировать сторонние библиотеки для работы с маршрутизацией.
Плагины полезны для:
Плагин подключается через метод router.use или при
создании маршрутизатора с помощью опции plugins (в Vue
Router версии 4 и выше):
import { createRouter, createWebHistory } from 'vue-router';
import myPlugin from './myPlugin';
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About },
],
plugins: [myPlugin]
});
Если используется функция-плагин, она принимает объект маршрутизатора как аргумент:
export default function myPlugin(router) {
router.beforeEach((to, from, next) => {
console.log(`Переход с ${from.fullPath} на ${to.fullPath}`);
next();
});
}
beforeEach, afterEach или
beforeResolve, чтобы выполнять действия при каждом
переходе. Например, проверка прав пользователя или сбор статистики:router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !user.isAuthenticated) {
next({ path: '/login' });
} else {
next();
}
});
router.addRoute({ path: '/dashboard', component: Dashboard });
router.removeRoute('dashboard');
router.afterEach((to) => {
analytics.trackPage(to.fullPath);
});
Стандартная структура плагина включает:
router.app или прототип.Пример расширения методов маршрутизатора:
export default function toastPlugin(router) {
router.showMessage = (msg) => {
console.log(`Сообщение: ${msg}`);
};
router.beforeEach((to, from, next) => {
if (to.meta.showWelcome) {
router.showMessage('Добро пожаловать на страницу!');
}
next();
});
}
beforeEach хуки через плагин.Vue Router полностью совместим с TypeScript. При разработке плагинов
рекомендуется типизировать аргумент router и любые
добавляемые свойства:
import { Router } from 'vue-router';
export default function loggerPlugin(router: Router) {
router.beforeEach((to, from, next) => {
console.log(`Navigating from ${from.path} to ${to.path}`);
next();
});
}
Типизация позволяет избежать ошибок при использовании нестандартных методов и обеспечивает автодополнение при разработке.
Использование плагинов делает Vue Router гибким и расширяемым инструментом, позволяя выстраивать сложные маршрутизационные сценарии без избыточного кода в компонентах.