v-slot只能是template元素上,有一种额外情况
独占默认插槽
//父组件
<template>
<item >
<template v-slot:default> // v-slot:default可以不加,只能定义在template上
<div>牛奶</div>
</template>
<item>
</template>
//item子组件
<template>
<div>
<slot ></slot>//默认插槽
<h1>杯子 </h1>
</div>
</template>
具名插槽
//父组件
<template>
<div>
<layout>
<template v-slot:header>//v-slot指令使用插槽
<div >头部标题</div>
</template>
<div >显示的默认内容</div>
<!--或者
<template v-slot:default>
<div >显示的默认内容</div>
</template>
-->
<template v-slot:footer>
<div >尾部</div>
</template>
</layout>
</div>
</template>
//子组件
<template>
<div>
<layout>
<h1>layout子组件</h1>
<slot name="header"></slot> //这种就叫具名插槽
<slot></slot> //如果不指定名字,就会将模板中未匹配到的内容渲染到默认插槽中,这里为显示的内容
<slot name="footer"></slot>
</layout>
</div>
</template>
这里的 attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的 Vue 实例有一个 data 属性 attributeName,其值为 “header”,那么这个绑定将等价于 v-slot:header。
<layout>
<template v-slot:[attributeName]>
...
</template>
</layout>
2.6后插槽 可以把参数之前的所有内容 (v-slot:) 替换为字符 #。例如 v-slot:header 可以被重写为 #header
v-slot:后面必须有值,不可写成#="{data}"
<template>
<div>
<cup>
<template #default="msg">
<div>
{{size}}
</div>
</template>
</cup>
</div>
</template>