2020-11-12 06:48:13
<slot>标签在HTML(Vue框架)中用于定义组件的可替换区域,允许父组件向子组件注入内容。其核心作用是通过占位符机制实现组件内容的动态定制,具体分配方法及类型如下:
一、核心作用子组件定义:直接使用<slot>标签,可设置默认内容(父组件未注入时显示)。
<!-- 子组件 --><div class="card-body"> <slot>默认内容</slot></div>父组件注入:未指定v-slot的内容自动插入默认插槽。
<!-- 父组件 --><my-card> <p>这是卡片的主要内容。</p> <!-- 自动插入默认插槽 --></my-card>子组件定义:通过name属性命名插槽。
<!-- 子组件 --><div class="card-header"> <slot name="header">默认标题</slot></div><div class="card-footer"> <slot name="footer">默认页脚</slot></div>父组件注入:使用<template v-slot:name>指定插入位置(Vue 3支持简写#name)。
<!-- 父组件 --><my-card> <template v-slot:header> <h1>卡片标题</h1> </template> <template #footer> <small>版权所有</small> </template></my-card>子组件传递数据:通过v-bind将数据绑定到插槽。
<!-- 子组件 --><ul> <li v-for="item in items" :key="item.id"> <slot :item="item">{{ item.name }}</slot> </li></ul>父组件接收数据:通过v-slot:default="slotProps"访问子组件传递的数据。
<!-- 父组件 --><my-list> <template v-slot:default="slotProps"> <strong v-if="slotProps.item.id === 2"> {{ slotProps.item.name }} (特别推荐) </strong> <span v-else>{{ slotProps.item.name }}</span> </template></my-list>