Приоритет сопоставления маршрутов — это система, которая определяет, какой именно маршрут должен быть активирован, когда текущий URL соответствует нескольким зарегистрированным маршрутам.
Vue Router использует следующий порядок приоритетов:
:param
)*
, :pathMatch(.*)*
)const routes = [
{ path: '/user/me', component: UserMe }, // 1. Статический - высший приоритет
{ path: '/user/:id', component: User }, // 2. Динамический
{ path: '/user/:id(\\d+)', component: User }, // 3. С regex ограничением
{ path: '/user/*', component: NotFound } // 4. Wildcard - низший приоритет
]
Для URL /user/me
:
/user/me
и /user/:id
/user/me
(статический приоритетнее)Для URL /user/123
:
/user/:id
и /user/:id(\\d+)
/user/:id(\\d+)
(regex ограничение дает приоритет)Дочерние маршруты имеют более низкий приоритет:
{
path: '/parent',
component: Parent,
children: [
{ path: 'child', component: Child } // /parent/child
]
},
{ path: '/parent/child', component: Other } // Этот маршрут будет иметь приоритет
Должны быть объявлены последними:
// Неправильно:
{ path: '*', component: NotFound },
{ path: '/about', component: About } // Этот маршрут никогда не сработает
// Правильно:
{ path: '/about', component: About },
{ path: '*', component: NotFound } // Должен быть последним
Использование strict
и sensitive
:
const router = createRouter({
history: createWebHistory(),
routes,
strict: true, // учитывать trailing slash
sensitive: true // учитывать регистр
})
Можно изменить порядок маршрутов:
routes.sort((a, b) => {
// Кастомная логика сравнения
return a.path.length - b.path.length
})
Для проверки можно использовать:
router.resolve('/some/path').matched
Или добавить глобальный навигационный хук:
router.beforeEach((to, from) => {
console.log('Matched routes:', to.matched)
})
strict
, sensitive
и сортировкуПонимание приоритетов сопоставления критически важно для: