Параметры маршрутов в Vue Router позволяют передавать динамические данные в компоненты через URL. Они используются для построения гибкой навигации, где часть адреса может быть переменной. Параметры маршрутов бывают двух типов: динамические сегменты и параметры запроса.
Динамический сегмент указывается в маршруте с помощью двоеточия
: перед именем параметра:
const routes = [
{ path: '/user/:id', component: User }
];
Здесь :id — динамический параметр. Он будет доступен
внутри компонента через объект this.$route.params:
export default {
mounted() {
console.log(this.$route.params.id);
}
}
Особенности динамических сегментов:
{ path: '/user/:userId/post/:postId', component: Post }
const userId = Number(this.$route.params.userId);
Необязательные параметры задаются с помощью символа
?:
{ path: '/search/:query?', component: Search }
Если параметр не передан, this.$route.params.query будет
undefined.
Параметры запроса — это ключи и значения, передаваемые после
? в URL:
/products?page=2&sort=asc
В Vue Router они доступны через this.$route.query:
console.log(this.$route.query.page); // "2"
console.log(this.$route.query.sort); // "asc"
Особенности параметров запроса:
/filter?tag=js&tag=vue
console.log(this.$route.query.tag); // ["js", "vue"]
Vue Router позволяет переходить на маршруты с параметрами как динамически, так и через объект:
// Динамический сегмент
this.$router.push({ name: 'user', params: { id: 123 } });
// Параметры запроса
this.$router.push({ path: '/products', query: { page: 2, sort: 'asc' } });
Важный момент: при использовании name
маршрута параметры передаются через params, а при
использовании path — через query.
Для автоматического отслеживания изменений параметров можно
использовать watch или beforeRouteUpdate в
компоненте:
export default {
watch: {
'$route.params.id'(newId) {
this.fetchUser(newId);
}
}
}
export default {
beforeRouteUpdate(to, from, next) {
this.fetchUser(to.params.id);
next();
}
}
Динамические сегменты поддерживают регулярные выражения для валидации:
{ path: '/user/:id(\\d+)', component: User }
Это гарантирует, что id будет состоять только из цифр.
Несоответствие регулярному выражению приведёт к тому, что маршрут не
будет сопоставлен.
Vue Router не поддерживает прямое задание дефолтных значений в маршруте. Обычно это реализуется через проверку внутри компонента:
const userId = this.$route.params.id || 1;
или при навигации:
this.$router.push({ name: 'user', params: { id: id || 1 } });
params.query.push, replace с params и
query.watch или beforeRouteUpdate.Эти механизмы делают маршрутизацию в Vue Router гибкой и мощной, позволяя создавать динамические интерфейсы с минимальными усилиями.