Vue Router предоставляет возможность создавать динамическую навигацию
между компонентами в одностраничных приложениях (SPA). Одним из ключевых
инструментов для управления активными ссылками является свойство
linkActiveClass, позволяющее задать
CSS-класс, который будет автоматически применяться к
<router-link> при совпадении текущего маршрута.
linkActiveClassПо умолчанию Vue Router использует класс
router-link-active для активного
<router-link>. Это означает, что когда текущий путь
совпадает с to маршрутом ссылки, к элементу добавляется
этот класс, что удобно для стилизации активного состояния, например,
подсветки меню или изменения цвета текста.
Однако в реальных проектах часто требуется использовать собственные
классы, чтобы соответствовать существующему стилевому гиду или
CSS-фреймворку. Для этого служит
linkActiveClass, который позволяет
полностью переопределить стандартный класс.
const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About },
{ path: '/contact', component: Contact }
],
linkActiveClass: 'active-link'
})
В этом примере все <router-link> автоматически
будут получать класс active-link вместо стандартного
router-link-active.
linkActiveClass от exactActiveClassВажно различать два похожих свойства:
linkActiveClass — применяется, если
текущий путь начинается с пути ссылки. Например, для
<router-link to="/about"> класс будет активен и при
/about/team, /about/history.exactActiveClass — применяется только
при точном совпадении пути. Для той же ссылки
<router-link to="/about"> класс будет активен только
на /about, но не на /about/team.const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes: [...],
linkActiveClass: 'active-link',
exactActiveClass: 'exact-active-link'
})
Эта настройка позволяет гибко управлять различными уровнями подсветки навигации.
С помощью linkActiveClass можно реализовать:
.active-link {
color: white;
background-color: #007BFF;
border-radius: 4px;
padding: 4px 8px;
}
.active-link {
transition: all 0.3s ease-in-out;
transform: scale(1.05);
}
Если проект использует Bootstrap, можно назначить
linkActiveClass: 'active', чтобы интегрировать стандартные
классы.
linkActiveClass с вложенными маршрутамиПри работе с nested routes (children)
важно учитывать, что linkActiveClass будет применяться ко
всем ссылкам, путь которых является префиксом текущего маршрута.
Пример:
const routes = [
{ path: '/dashboard', component: Dashboard, children: [
{ path: 'stats', component: Stats },
{ path: 'reports', component: Reports }
]}
]
<router-link to="/dashboard">Dashboard</router-link>
получит active-link, когда текущий путь
/dashboard/stats или /dashboard/reports./dashboard, используется
exactActiveClass.Можно менять linkActiveClass программно при создании
маршрутизатора или в плагинах, передавая разный класс в зависимости от
темы приложения или условий:
const theme = 'dark'; // или 'light'
const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes: [...],
linkActiveClass: theme === 'dark' ? 'dark-active' : 'light-active'
})
Таким образом, визуальное оформление ссылок подстраивается под тему без изменения разметки компонентов.
linkActiveClass работает только с компонентами
<router-link>.linkActiveClass и
exactActiveClass, чтобы четко разграничить активное
состояние родительских и дочерних ссылок.linkActiveClass на уровне
маршрутизатора, а не в отдельных компонентах, чтобы сохранить
единообразие.exactActiveClass для точной
настройки визуальных эффектов на навигационных элементах.