Index
[Vue.js] Components with multiple slots
Tested with: Vue v3
Use multiple named slots in Vue components to pass different content to different parts of the component.
For example, a layout component with two named slots, left and right for the outer most columns, and a default slot for the middle main column (CSS ommitted for brevity).
<template> <div class="columns"> <div class="column"> <slot name="left"></slot> </div> <main class="column"> <slot></slot> </main> <div class="column"> <slot name="right"></slot> </div> </div></template>Use the slot attribute to specify the slot name when using the component. And all other projected content will be placed in the default slot.
<template> <Layout> <template #left> <div>Left sidebar</div> </template>
<div>Main content</div>
<template #right> <div>Right sidebar</div> </template> </Layout></template>This renders outs as:
<div class="columns"> <div class="column"> <div>Left sidebar</div> </div> <main class="column"> <div>Main content</div> </main> <div class="column"> <div>Right sidebar</div> </div></div>