vue实现分发
Vue 实现分发的方法
Vue 中的分发通常指的是组件之间的内容分发,主要通过插槽(Slots)来实现。插槽允许父组件向子组件传递内容,实现更灵活的组件组合。
默认插槽
默认插槽是最基础的分发方式,父组件可以在子组件标签内部插入内容,子组件通过 <slot> 标签接收这些内容。
<!-- 子组件 Child.vue -->
<template>
<div>
<slot></slot>
</div>
</template>
<!-- 父组件 Parent.vue -->
<template>
<Child>
<p>这是分发的内容</p>
</Child>
</template>
具名插槽
具名插槽允许父组件向子组件的特定插槽分发内容,子组件通过 <slot name="slotName"> 定义插槽,父组件通过 v-slot:slotName 或 #slotName 指定分发内容。
<!-- 子组件 Child.vue -->
<template>
<div>
<slot name="header"></slot>
<slot></slot>
<slot name="footer"></slot>
</div>
</template>
<!-- 父组件 Parent.vue -->
<template>
<Child>
<template v-slot:header>
<h1>这是头部内容</h1>
</template>
<p>这是默认内容</p>
<template #footer>
<p>这是底部内容</p>
</template>
</Child>
</template>
作用域插槽
作用域插槽允许子组件向父组件传递数据,父组件可以在分发内容时使用这些数据。子组件通过 <slot :data="data"> 传递数据,父组件通过 v-slot:slotName="props" 接收数据。
<!-- 子组件 Child.vue -->
<template>
<div>
<slot :user="user"></slot>
</div>
</template>
<script>
export default {
data() {
return {
user: { name: 'Alice', age: 25 }
}
}
}
</script>
<!-- 父组件 Parent.vue -->
<template>
<Child>
<template v-slot:default="props">
<p>用户名: {{ props.user.name }}</p>
<p>年龄: {{ props.user.age }}</p>
</template>
</Child>
</template>
动态插槽名
动态插槽名允许通过动态绑定的方式指定插槽名称,适用于需要根据条件动态分发内容的场景。
<!-- 父组件 Parent.vue -->
<template>
<Child>
<template v-slot:[dynamicSlotName]>
<p>动态分发的内容</p>
</template>
</Child>
</template>
<script>
export default {
data() {
return {
dynamicSlotName: 'header'
}
}
}
</script>
插槽的默认内容
子组件可以在 <slot> 标签内部定义默认内容,当父组件没有分发内容时显示默认内容。

<!-- 子组件 Child.vue -->
<template>
<div>
<slot>默认内容</slot>
</div>
</template>
<!-- 父组件 Parent.vue -->
<template>
<Child></Child> <!-- 显示默认内容 -->
</template>
通过以上方法,Vue 的插槽机制可以实现灵活的内容分发,满足不同场景下的组件组合需求。






