插槽、默认插槽、具名插槽、作用域插槽

插槽的作用:让组件内部的一些 结构 支持 自定义

应用场景 eg:将对话框封装成组件,对话框的内容部分不希望写死,希望能使用的时候自定义。

 

插槽的基本语法:

1. 组件内需要定制的结构部分  改用 <slot> </slot> 占位

2. 使用组件时,<MyDialog></MyDialog> 标签内部,传入结构替换 slot

  ( <MyDialog> 你确认要退出系统吗?</MyDialog>、<MyDialog> <div>确认要删除吗?</div> </MyDialog>)

 

 

如果不传定制内容,则是空白。可以给插槽设置默认显示内容。

插槽后备内容:封装组件时,可以为预留的 <slot> 插槽提供 后备内容(默认内容)

语法:在 <slot> </slot> 标签内 放置内容,作为默认显示内容(<slot> 我是默认内容 </slot>)

效果:外部使用组件时,如果不传东西,则 slot 会显示后备内容;若外部使用组件时传东西了,则 slot 整体会被换掉

 

 

具名插槽:

应用场景:默认插槽只能完成一个定制的位置,要么定制内容,要么定制标题。如果一个组件内有多处结构 需要外部传入标签进行定制,就要用到具名插槽

语法:

1. 多个 slot 使用 name 属性区分名字

eg:

<div  class = "dialog-header">

      <slot  name = "head"> </slot>

</div>

<div  class = "dialog-content">

      <slot  name = "content"> </slot>

</div>

<div  class = "dialog-footer">

      <slot  name = "footer"> </slot>

</div>

2. template 配合 v-slot:名字   来分发对应标签(v-slot : 插槽名 可以简写成 #插槽名,例如 v-slot : head   →   #head)

eg:

<MyDialog>

      <template  v-slot : head>

            大标题

      </template>

      <template  v-slot : content>

            内容文本

      </template>

      <template  v-slot : footer>

            <button> 按钮 </button>

      </template>

</MyDialog>

 

 

插槽其实分为两类:默认插槽、具名插槽

作用域插槽是插槽的一个传参语法,并不属于插槽的分类当中

作用域插槽:定义 slot 插槽的同时,是可以 传值 的。在插槽上可以绑定数据,将来 使用组件时可以用

场景: 封装表格组件:

      父传子,动态渲染表格内容

      用默认插槽定制操作列

      删除或查看都需要用到 当前项的 id,属于组件内部的数据,通过 作用域插槽 传值绑定,进而使用

 

作用域插槽使用步骤:

1. 给 slot 标签  以 添加属性的方式 传值

      <slot   :id = "item.id"   msg = "测试文本" > </slot>   // item:每一项

    所有被添加的属性,都会被收集到一个对象中

      eg:{ id : 3 ,  msg : ' 测试文本 ' }

2. 在 template 中,通过  #插槽名 = " obj "   接收,默认插槽名为 default

<MyTable   :list = " list ">

      <template    #default = " obj ">      //如果是具名插槽,就是  #具名插槽的名字 = " obj "     obj是局部变量,是用来接收第1步的对象的。

            <button   @click = " del (obj.id) "> 删除 </button>

      </template>

</MyTable>

 

posted @ 2023-10-10 17:18  1stzz1  阅读(91)  评论(0编辑  收藏  举报