在Vue中,slot
(插槽)是一种非常重要的内容分发机制,允许我们将组件模板的一部分内容编写在父组件中,并在子组件的模板中进行展示。Vue提供了三种类型的插槽:默认插槽、具名插槽和作用域插槽。
默认插槽
默认插槽是最基本的插槽类型,当<slot>
标签没有指定name
属性时,它就是一个默认插槽。父组件中不在任何<slot>
标签内的内容将被视为默认插槽的内容。
子组件:
<div>
<slot>默认内容</slot>
</div>
父组件:
<ChildComponent>
这里的内容将显示在子组件的默认插槽中。
</ChildComponent>
具名插槽
具名插槽允许我们定义多个插槽,每个插槽都有自己的名字。通过name
属性来指定插槽的名称。父组件中使用<template v-slot:slotName>
来指定对应的插槽内容。
子组件:
<div>
<slot name="header">默认头部内容</slot>
<slot name="footer">默认底部内容</slot>
</div>
父组件:
<ChildComponent>
<template v-slot:header>
这里是头部内容。
</template>
<template v-slot:footer>
这里是底部内容。
</template>
</ChildComponent>
作用域插槽
作用域插槽允许子组件将数据传递回父组件的插槽内容中。这种方式使得父组件可以根据子组件传递的数据来决定插槽内容的渲染方式。
子组件:
<div>
<slot name="userinfo" :user="user">
默认用户信息
</slot>
</div>
export default {
data() {
return {
user: {
name: '张三',
age: 30
}
};
}
}
父组件:
<ChildComponent>
<template v-slot:userinfo="{ user }">
用户名:{{ user.name }},年龄:{{ user.age }}
</template>
</ChildComponent>
通过这些示例,我们可以看到slot
在Vue中的强大功能,它为组件间的内容分发提供了灵活的方式。
项目:工业区数据大屏就使用了slot,将大屏标题图标边框封装为一个组件,然后将主体以插槽的形式暴露出来以放对应的内容,方便对边框的管理和修改。