slot插槽学习总结

什么是插槽

  • 服务于组件的封装者
  • 是组件中不确定的、由用户指定的那部分
  • <slot>:插槽出口,标示父组件提供的插槽内容在哪里被渲染
  • 插槽内容:可以是任意合法的模板内容,不局限于文本,可以是多个元素
  • 插槽数据作用域:插槽可以访问父组件数据作用域,访问不了子组件数据(可以通过作用域插槽访问子组件的部分数据)
  • 动态插槽名: <template v-slot:[dynamicSlotName]>

插槽分类

  1. 匿名插槽
  2. 具名插槽
  3. 作用域插槽

后备(默认)内容

<slot>default content</slot>
  • 在父组件没有提供内容的时候渲染
  • 当父组件提供了内容则渲染父组件提供的内容

匿名插槽(默认插槽)

<slot></slot>
  • 没有配置name属性的插槽
  • 会隐式命名为"default"

具名插槽

<slot name="header"></slot>
  • 配置了name属性的插槽
  • 作用:可以在一个组件中配置多个插槽出口
  • 放置在配置了slot属性的内容会被传入相应名字的插槽
  • 没有放置在配置了slot属性的内容都会被视为默认插槽的内容

提供内容时:

  • 可以在<template>上使用slot,<template v-slot:header>或<template slot=“header”>
  • v-slot可以简写为#,<template #header>
  • 也可以直接放在标签中,<div slot=“header”>

作用域插槽

<slot :obj="obj" :attr="attr"></slot>
  • 绑定在插槽元素上的属性是插槽prop
  • 作用域插槽使父组件的插槽内容可以访问子组件中的props数据

提供内容(接收props)时:

  1. 匿名作用域插槽:
<MyComponent v-slot="slotProps">{{ slotProps.text }}</MyComponent>
// 解构写法
<MyComponent v-slot="{ text, count }">{{ text }} {{ count }}</MyComponent>
  1. 具名作用域插槽:
<template #header="headerProps">{{ headerProps }}</template>
<template slot="header" slot-scope="data">{{data.obj.lastName}}</template>
  • 这里的data(也可以使用其他名字)指代插槽的所有prop,通过data可以拿到子组件的obj
  • 同时使用了默认插槽和具名插槽,需要为默认插槽使用<template #default>,这是为了避免默认插槽的props作用域不清晰

注意!!!

  1. 不使用插槽直接在子组件中插入的内容不生效
  2. 插槽内可以包含任何模板代码,包括HTML,其他组件等
  3. 插槽可以访问父组件数据作用域,访问不了子组件数据
  4. 可以通过作用域插槽访问子组件数据
  5. 同时使用了默认插槽和具名插槽,需要为默认插槽使用<template #default>,这是为了避免默认插槽的props作用域不清晰

总结

  • 插槽的作用:使模板分块,具有模块化的特质和更大的重用性
  • 父组件:可以控制插槽是否显示以及如何显示
  • 子组件:可以控制插槽在哪里显示
  • 插槽分类:默认插槽/具名插槽/作用域插槽
  • VUE模板中的表达式只能访问其定义时所处的作用域,父组件插槽内容可以通过作用域插槽去访问子组件的部分数据
  • 当一个组件同时接收默认插槽和具名插槽时,所有位于顶级的非节点都被隐式地视为默认插槽的内容
  • 无渲染组件:只包括了逻辑而不需要自己渲染内容,视图输出通过作用域插槽全权交给了父组件
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI中的插槽使用方法是通过使用v-slot指令来定义插槽内容。在表格组件中,可以使用v-slot来自定义表格的头部插槽。例如,可以在表格的头部插入额外的内容,如搜索框或筛选按钮。 举个例子,Element UI中的插槽可以通过以下方式定义: ```html <el-input v-model="name" clearable placeholder=""> <el-button slot="append" icon="el-icon-caret-bottom" @click="show()"></el-button> </el-input> ``` 以上代码中,使用了slot="append"来定义了一个名为"append"的插槽,将el-button作为插槽内容,从而在el-input组件中添加了一个带有下拉箭头的按钮。 总结:Element UI中的插槽使用v-slot指令来定义插槽内容,可以通过slot属性来指定插槽的名称,从而实现自定义表格的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Vue】Element Plus和Element UI中插槽使用](https://blog.csdn.net/SqlloveSyn/article/details/131063970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue+element UI 学习总结笔记(四)_ 插槽](https://blog.csdn.net/wh_xia_jun/article/details/100881641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值