首页 > 其他分享 >vue3 封装el-table时,构造$children(类式写法)

vue3 封装el-table时,构造$children(类式写法)

时间:2022-09-28 11:57:11浏览次数:57  
标签:el parent 实例 vue3 组件 table children

由于业务需求(组件封装),需要在获取el-table下面的el-table-column实例

在 vue2.x 当中直接使用this.$children就可以获取到该实例

但是 vue3.x 弃用了$children,官方建议使用$ref获取子组件实例,由于el-table-column是通过插槽形式插入,且当el-table-column数过多时,不可能专门为每一个el-table-column都添加ref,在网上搜索之后发现有人建议使用$slot获取插入的组件实例,但是获取到的实例信息不足,因此决定构造一个“$children”出来

1. 使用$slots

打印$slots

console.log(this.$slots);
// 若是setup需要在setup当中接收slots参数

image

调用$slots里面的default

(this.$slots as any).default()
// 若是setup需要在setup当中接收slots参数

image

2. 构造$children

思路:思路很简单,直接在el-table-column挂载时,调用父组件的方法,并传入自身实例即可

  1. 为方便在el-table-column挂载时做处理,封装一下el-table-column
<el-table-column
    v-bind="$props"
    ref="elColumn"
    :sortable="sortable"
    :merge="merge"
    :merge-by="mergeBy"
    :formatter="compatibleFormatter"
    v-on="$attrs"
  >
    <template v-if="$slots.default" #default="scope">
      <slot v-bind="scope" />
    </template>
    <template v-if="$slots.header" #header="scope">
      <slot name="header" v-bind="scope" />
    </template>
</el-table-column>

在挂载的时候调用父方法

mounted() {
    // 获取表格列的配置
    this.columnConfig = (this.$refs as any).elColumn?.$?.columnConfig?.value

    // this.$parent获取到的是el-table组件的实例,this.$parent.$parent才是我们自己写的组件的实例
    if (this.$parent && this.$parent.$parent) {
      const _this = this;
      (this.$parent.$parent as any).setChildrenInstance(_this)
    }
}
  1. 在父组件接收实例并存放起来
    新建父组件(简写)
<el-table>
    <slot />
</el-table>

接收子组件实例

public childrens: any[] = []

public setChildrenInstance(children: any) {
    this.childrens.push(children)
}

// 在用的地方调用childrens即可 打印 console.log(this.childrens);

image

标签:el,parent,实例,vue3,组件,table,children
From: https://www.cnblogs.com/my-wl/p/16737489.html

相关文章

  • 使用Python将TXT文件提取到Excel表格当中
    importrowasrowimportxlwtdefwriteinexcel():f=open('bZhanRank.txt','r',encoding='utf-8')#打开数据文本文档,注意编码格式的影响wb=xlwt.......
  • elsarticle 模板提示 Overfull \hbox (2.61108pt too wide) 问题的解决
    在用Elsevier提供的elsarticle模板写作时,编译提示:Overfull\hbox(2.61108pttoowide)一般情况下,该提示是说程序找不到合适的换行点,导致某行文字太满(Overfull),但这......
  • 1、OpenMP常用函数、parallel、for
    基本思想:因为看NCNN源码,发现up主代码中,使用了OpenMP预编译指令,所以详细查阅了资料,先简单学习一下,等有时间在补充NCNN代码的中的实例,这里原理不详细叙述,只记录使用,以备后续用......
  • 41、labelimg数据集转dota以及rolabelimg、labelimg数据集旋转水平镜像 垂直镜像 和水
    基本思想:为了给BBAVectors-Oriented-Object-Detection提供数据,所以记录一下操作,搞了旋转,但是旋转影响图片大小,所以先写个镜像方法,进行训练和使扩充数据集一、labelimg转dot......
  • AWS API Gateway IP WhileList
    首先创建个API,然后进入API配置,点击左边的资源配置,加入以下配置:{"Version":"2012-10-17","Statement":[{"Effect":"Allow",......
  • 38、记录使用华为的ModelArts去调用npu训练yolov5模型和推理
    基本思想:有机会使用华为ModelArts云服务,做一下尝试,逐记录一下第一步:登录帐号,查看一下服务配置,镜像自己选择和缴费就行[ma-user~]$npu-smiinfo+--------------------------......
  • linux iptables
    目录linuxiptablesNetfilter模块四表五链四表五链四表五链之间的关系iptables语法参数iptables语法格式iptables常用参数常用实例删除已有规则设置链的默认策略阻止指......
  • Vue3源码解读之patch
    例子代码本篇将要讲解domdiff,那么咱们结合下面的例子来进行讲解,这个例子是在上一篇文章的基础上,加了一个数据变更,也就是list的值发生了改变。html中增加了一个按钮change......
  • 强烈推荐的elasticsearch集群连接工具: elasticvue
    个人感觉非常棒的es-cluster连接工具,检查状态什么的,一目了然,支持中文超方便,比elasticSearchHead好用多了.安装方法打开微软浏览器edge-商城搜索-Elasticvue-安装......
  • JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
    企业数据越存越多,存储容量与查询性能、以及存储成本之间的矛盾对于技术团队来说是个普遍难题。这个难题在Elasticsearch与ClickHouse这两个场景中尤为突出,为了应对不同......