路由组件传参
使用 $route 会组件与其对应路由形成高度耦合,使组件只能在特定的 URL 上使用,不灵活
路由组件设置 props
保持 props 函数为无状态的,因为它只在路由发生变化时起作用
如果需要状态来定义 props,需使用包装组件,这样 Vue 才可以对状态变化做出反应
使用 props 将组件和路由解耦
const User = {
props: ['id'],
template: '<div>User {{ id }}</div>'
}
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User, props: true }, /* 为单个路由组件设置 props */
{
path: '/user/:id',
components: { default: User, sidebar: Sidebar },
props: { default: true, sidebar: false } /* 为多个路由组件设置 props */
}
]
})
布尔模式: 如果 props 被设置为 true,route.params 将会被设置为组件属性
对象模式: 如果 props 是一个对象,它会被按原样设置为组件属性。当 props 是静态的时候有用
const router = new VueRouter({
routes: [
{
path: '/promotion/from-newsletter',
component: Promotion, props: { newsletterPopup: false }
}
]
})
函数模式
创建一个函数返回 props。可以将参数转换成另一种类型,将静态值与基于路由的值结合…
const router = new VueRouter({
routes: [
{
path: '/search',
component: SearchUser,
props: (route) => ({ query: route.query.q })
}
]
})
/* URL /search?q=vue 会将 {query: 'vue'} 作为属性传递给 SearchUser 组件 */