Приоритет сопоставления маршрутов — это система, которая определяет, какой именно маршрут должен быть активирован, когда текущий 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 и сортировкуПонимание приоритетов сопоставления критически важно для: