插槽#
默认插槽#
作用:让组件内部的一些结构支持自定义
需求:在页面中显示一个对话框,封装为一个组件
组件的内容部分,不希望写死,希望能在使用时自定义提示内容
插槽基本语法#
- 组件内需要定制的结构部分,改用
<slot></slot>
占位 - 使用组件时,
<MyDialog></MyDialog>
标签内部,传入结构替换slot
例:
MyDialog.vue:
1 | <template> |
App.vue:
1 | <!-- 在使用组件时,在组件标签中插入定制内容 --> |
后备内容(默认值)#
通过插槽完成了内容的定制,传什么就显示什么
但若不传,则是空白
为了避免这类情况,可以给插槽设置默认显示内容
插槽后备内容:封装组件时,可以为预留的<slot>
插槽提供后备内容
- 语法:直接在
<slot>
标签内,放置内容,则会作为默认显示
1 | <slot>默认文本内容</slot> |
- 效果:外部使用组件时,不传递内容,则插槽显示默认内容,若外部使用组件时传递了内容,则
<slot>
整体会被替换掉
具名插槽#
当一个组件内有多处结构,需要从外部传入标签进行定制时,默认插槽就没法用了,它只支持一个定制的位置
此时需要用到具名插槽
具名插槽语法:
- 多个
slot
使用name
属性区分名字
1 | <template> |
temlate
配合v-slot:插槽名
来分发对应标签,v-slot:插槽名
可以简写为#插槽名
1 | <MyDialog> |
一旦插槽起了名字,就是具名插槽,只支持定向分发
作用域插槽#
插槽分类:默认插槽(组件内定制一处结构),具名插槽(组件内定制多处结构)
作用域插槽是插槽的一个传参语法
作用:定义slot
插槽时,是可以传值的,给插槽上绑定数据,将来使用组件时可以用
场景:封装表格组件
- 父传子,动态渲染表格内容
- 利用默认插槽,定制操作列
- 删除或查看操作,都需要用到当前项的 id,属于组件内部的数据
通过作用域插槽传值绑定进而使用
基本使用步骤:
- 给
slot
标签,以添加属性的方式传值
1 | <slot :id="item.id" msg="测试文本"></slot> |
- 所有添加的属性,都会被收集到一个对象中
1 | { "id": 3, "msg": "测试文本" } |
- 在
template
中,通过#插槽名='obj'
接收,默认插槽名为default
1 | <MyTable :list="list"> |
完整代码:
App.vue:
1 | <template> |
MyTable.vue:
1 | <template> |