Vue Router предоставляет мощный механизм передачи данных в компоненты
через свойства props. Использование props вместо
$route.params или $route.query делает
компоненты более чистыми, переиспользуемыми и
тестируемыми, так как компоненты получают данные напрямую через
стандартный интерфейс Vue, а не через глобальный объект маршрута.
Чтобы маршрут передавал данные через props, необходимо добавить в его
конфигурацию свойство props. Vue Router поддерживает
несколько способов передачи props:
const routes = [
{
path: '/user/:id',
component: User,
props: true
}
]
Ключевые моменты:
props установлено в true, все
параметры маршрута (params) автоматически передаются в
компонент как props.User может напрямую использовать
id как свойство:export default {
props: ['id'],
mounted() {
console.log(this.id)
}
}
Помимо передачи params напрямую, можно использовать
объект, чтобы задать статические props:
const routes = [
{
path: '/about',
component: About,
props: { title: 'О проекте', showHeader: true }
}
]
В этом случае компонент About получит два props:
title и showHeader с указанными
значениями.
Для более гибкой передачи данных можно использовать функцию:
const routes = [
{
path: '/search',
component: SearchResults,
props: route => ({ query: route.query.q })
}
]
Особенности этого подхода:
route содержит объект маршрута.params, query или любого другого свойства
маршрута.Пример использования в компоненте:
export default {
props: ['query'],
watch: {
query(newValue) {
this.fetchResults(newValue)
}
},
methods: {
fetchResults(searchTerm) {
// логика запроса на сервер
}
}
}
Использование props:
Использование $route внутри
компонента:
$route.params или $route.query.Вложенные маршруты (children) также поддерживают props.
Пример:
const routes = [
{
path: '/users/:userId',
component: UserLayout,
props: true,
children: [
{
path: 'profile',
component: UserProfile,
props: route => ({ userId: route.params.userId })
}
]
}
]
Особенности:
userId через
props.userId, если
это требуется.watch
для отслеживания изменений props.params и
query, можно комбинировать их при помощи функции для
props:props: route => ({
id: route.params.id,
filter: route.query.filter || 'all'
})
Использование props в маршрутах делает приложение более структурированным, повышает читаемость кода и упрощает повторное использование компонентов. Это особенно полезно в больших приложениях с динамическими маршрутами и сложной логикой отображения.