插槽不是Vue3新增内容,但是对这块我一直有点模糊,所以重新学习一下
插槽内容
slot
元素作为承载内容分发的出口,在slot
插槽中可以包含任何模板代码或者其他组件
在组件中:
<!-- todo-button 组件模板 -->
<button class="btn-primary">
<slot></slot>
</button>
在调用时:
<todo-button>
<!-- 添加一个Font Awesome 图标 -->
<i class="fas fa-plus"></i>
Add todo
</todo-button>
todo-button>
<!-- 添加一个图标的组件 -->
<font-awesome-icon name="plus"></font-awesome-icon>
Add todo
</todo-button>
如果组件中没有slot
元素,那么组件起始标签和结束标签之间的内容都会被抛弃
渲染作用域
在插槽中使用数据时,例如
<todo-button action="delete">
Delete a {
{ item.name }}
</todo-button>
插槽之间的内容与模板其余部分有相同的作用域,可以访问组件实例所有的Property
但是插槽不能访问<todo-button>
的作用域,例如上面的例子中,是无法访问action
的 ,因为action
是被传递到<todo-button>
中的,不要是在父级作用域中被定义的
父级模板的所有内容都是在父级作用域中编译的,子模板的所有内容都是在子作用域中定义的
备用内容
在<slot>
标签之间的内容会作为备用内容存在,当父组件中不提供任何插槽内容时,备用内容会被渲染,如果提供了内容,备用内容会被提供的内容所取代
具名插槽
<s