vue实现分发
Vue 实现分发的方法
Vue 提供了多种方式来实现内容分发,主要通过插槽(Slots)和作用域插槽(Scoped Slots)来实现组件间的灵活内容传递。
默认插槽
默认插槽是最简单的分发方式,允许父组件向子组件传递内容。子组件通过 <slot> 标签定义插槽位置,父组件在子组件标签内部插入内容。
子组件 ChildComponent.vue:
<template>
<div>
<slot></slot>
</div>
</template>
父组件使用:
<template>
<ChildComponent>
<p>这是分发的内容</p>
</ChildComponent>
</template>
具名插槽
具名插槽允许父组件向子组件的多个插槽分发内容。子组件通过 <slot name="slotName"> 定义具名插槽,父组件通过 v-slot:slotName 或 #slotName 指定内容。
子组件 ChildComponent.vue:
<template>
<div>
<slot name="header"></slot>
<slot></slot>
<slot name="footer"></slot>
</div>
</template>
父组件使用:
<template>
<ChildComponent>
<template v-slot:header>
<h1>这是头部内容</h1>
</template>
<p>这是默认插槽内容</p>
<template #footer>
<p>这是底部内容</p>
</template>
</ChildComponent>
</template>
作用域插槽
作用域插槽允许子组件向父组件传递数据,父组件可以根据子组件的数据动态渲染内容。子组件通过 <slot :data="data"> 传递数据,父组件通过 v-slot="slotProps" 接收数据。
子组件 ChildComponent.vue:
<template>
<div>
<slot :user="user"></slot>
</div>
</template>
<script>
export default {
data() {
return {
user: { name: 'John', age: 25 }
}
}
}
</script>
父组件使用:
<template>
<ChildComponent>
<template v-slot="slotProps">
<p>用户名:{{ slotProps.user.name }}</p>
<p>年龄:{{ slotProps.user.age }}</p>
</template>
</ChildComponent>
</template>
动态插槽名
动态插槽名允许通过动态绑定的方式指定插槽名称,适用于需要动态切换插槽的场景。
父组件使用:
<template>
<ChildComponent>
<template #[dynamicSlotName]>
<p>动态插槽内容</p>
</template>
</ChildComponent>
</template>
<script>
export default {
data() {
return {
dynamicSlotName: 'header'
}
}
}
</script>
通过以上方法,可以灵活实现 Vue 组件间的分发功能,满足不同场景的需求。







