基础
插槽内容可以为文本、模版、组件
1 2 3 4
| <FancyButton> Click me! </FancyButton>
|
1 2 3 4
| <button class="fancy-btn"> <slot></slot> </button>
|
渲染结果:
1
| <button class="fancy-btn">Click me!</button>
|
默认内容
子组件的 <slot></slot> 标签之间是默认值
1 2 3
| <button type="submit"> <slot>Submit</slot> </button>
|
具名插槽
当一个组件包含多个插槽出口时,需要使用 name 来给各个插槽分配唯一的 ID,没有提供 name 的插槽会隐式地命名为“default”。
1 2 3 4 5 6 7 8 9 10 11 12
| <div class="container"> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div>
|
在父组件中,使用 v-slot 或者 # 加上插槽名,来指定插槽内容。
1 2 3 4 5 6 7 8 9
| <BaseLayout> <template v-slot:header> </template> <template #footer> </template> </BaseLayout>
|
动态插槽名
可定义动态插槽名:
1 2 3 4 5 6 7 8 9
| <base-layout> <template v-slot:[dynamicSlotName]> </template>
<template #[dynamicSlotName]> ... </template> </base-layout>
|
作用域插槽
可以向插槽出口传递 attributes
默认插槽
1 2 3 4
| <div> <slot :text="message" :count="1"></slot> </div>
|
1 2 3 4 5 6 7 8 9
| <MyComponent v-slot="slotProps"> {{ slotProps.text }} {{ slotProps.count }} </MyComponent>
<MyComponent v-slot="{ text, count }"> {{ text }} {{ count }} </MyComponent>
|
具名插槽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <MyComponent> <template #header="headerProps"> {{ headerProps }} </template>
<template v-slot:default="defaultProps"> {{ defaultProps }} </template>
<template #footer="footerProps"> {{ footerProps }} </template> </MyComponent>
|
1 2 3 4
| <slot name="header" :msg1="hello1"></slot> <slot :msg2="hello2"></slot> <slot name="header" :msg3="hello3"></slot>
|