首页 > 其他分享 >vue3 设置动态 ref 并获取

vue3 设置动态 ref 并获取

时间:2024-08-12 17:51:31浏览次数:13  
标签:el name item tabs detail 获取 sellerDetails vue3 ref


<template>
  <el-tabs
    v-model="tabs.activeComp"
    type="border-card"
    class="ownCollections"
    @tab-change="tabsChange"
  >
    <el-tab-pane
      v-for="(item, key) in tabs.components"
      :key="item.name"
      :label="item.label"
      :name="item.name"
    >
      <component
        :ref="(el: refItem) => setRefMap(el, item)"
        v-bind="item.compProps"
        :is="item.component"
        @compFinish="compFinish"
      />
    </el-tab-pane>
  </el-tabs>
</template>

<script setup lang="ts">
import { ref, nextTick, reactive, type ComponentPublicInstance, onMounted } from 'vue'
import detail from './components/detail.vue'
import sellerDetails from '@/views/seller/sellerDetails.vue'
defineOptions({
  name: 'AsinIndex',
  descName: 'asin主页'
})

const tabs: any = ref({
  activeComp: 'detail',
  components: {
    detail: {
      label: 'ASIN详情',
      name: 'detail',
      component: detail
    },
    sellerDetails: {
      label: '卖家详情',
      name: 'sellerDetails',
      component: sellerDetails,
      compProps: {
        showTop: false,
        seller: {}
      }
    }
  }
})
const componentRefs = reactive<{ [key: string]: any }>({})

type refItem = Element | ComponentPublicInstance | null

const list = [{ name: 'ref1' }, { name: 'ref2' }, { name: 'ref3' }, { name: 'ref4' }]

const refMap: Record<string, refItem> = {}
const setRefMap = (el: refItem, item: { name: string }) => {
  if (el) {
    refMap[`${item.name}`] = el
  }
}

onMounted(() => {
  console.log(refMap)
})

function compFinish(record: any) {
  if (record.type === 'asinDetails') {
    tabs.value.components.sellerDetails.compProps.seller = record.seller
  }
}

async function tabsChange(activeName: any) {
  await nextTick()
  console.log('[ activeName ]-55', activeName)
  console.log('[ compRef.value ]-59', componentRefs.value)
}
</script>

<style lang="scss" scoped>
.ownCollections {
  margin-top: 64px;
  width: 100%;
  height: 100%;
  border-width: 1px 0 0 0;
  :deep(.el-tabs__content) {
    background-color: #f5f7fa;
    overflow-y: auto;
    &::-webkit-scrollbar {
      /* 隐藏滚动条 */
      width: 0; /* 隐藏滚动条宽度 */
    }
  }

  :deep(.el-tabs__header .is-top) {
    background-color: #fff;
    .el-tabs__item {
      border: 2px solid transparent;
    }
    .el-tabs__item.is-active {
      background-color: #f5f7fa;
      border-top: 2px solid var(--el-color-primary);
    }
  }
}
</style>

标签:el,name,item,tabs,detail,获取,sellerDetails,vue3,ref
From: https://www.cnblogs.com/zhengzhijian/p/18355455

相关文章

  • 安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T28181协议、部标JT808、GA/T1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等。有用户反馈,选用HIKSDK......
  • vue3 uniapp 上传图片
    直接上代码<uni-file-pickerfileMediatype="image"@select="selectFile"@delete="deleteFile"v-model="data.fileList"></uni-file-picker><viewclass="sub"@click="submit()">提交</......
  • 虚拟机网络设置 与dhcp 获取ip
     在宿主机(例如Linux服务器)中运行虚拟机时,虚拟机通常通过DHCP服务器获取IP地址。以下是如何配置和排查虚拟机DHCP获取IP的过程:1.检查虚拟机的网络配置虚拟机的网络配置类型通常有以下几种:NAT(NetworkAddressTranslation):虚拟机通过宿主机的IP地址访问外部......
  • Vue3+vite+axios+.net api 配置
    exportdefaultdefineConfig({plugins:[vue()],resolve:{alias:{"@":fileURLToPath(newURL("./src",import.meta.url)),},},server:{host:"0.0.0.0",open:true,//启动项目自动弹出浏览器port:&qu......
  • vue3面试题
    1.Vue3.0里为什么要用ProxyAPI替代definePropertyAPI?——响应式优化(高频,重点!!!)Vue更新的重点。definePropertyAPI的局限性最大原因是它只能针对单例属性做监听。Vue2中的响应式实现正是基于defineProperty中的descriptor,对data中的属性做了遍历+递归,为每个属......
  • 当仓库隔离时候在其他表单中获取仓库对应的库存
    #引入clr运行库importclr#添加对cloud插件开发的常用组件的引用clr.AddReference('System')clr.AddReference('System.Data')clr.AddReference('Kingdee.BOS')clr.AddReference('Kingdee.BOS.Core')clr.AddReference('Kingdee.BOS.App'......
  • 最高法-合同欺诈情况下,交易外第三人因当事人被欺诈行为获取钱财的,满足不当得利的要件
     (2017)最高法民再287号  南昌市市政建设有限公司(以下简称市政公司)因与被申请人刘忠友、江西省福振路桥建筑工程有限公司(以下简称路桥公司)建设工程合同纠纷案再审申请人主张:(一)二审判决认定事实缺乏证据证明,且与多份生效判决查明和认定的事实相悖,裁判结果错误。1.(2015)洪刑二初字......
  • 使用Pandas和NumPy实现数据获取
    公众号本文地址:https://mp.weixin.qq.com/s/Uc4sUwhjLTpOo85ubj0-QA以某城市地铁数据为例,通过提取每个站三个月15分钟粒度的上下客量数据,展示Pandas和Numpy的案例应用。数据:http://u6v.cn/5W2i8Hhttp://u6v.cn/6hUVjk初步发现数据有三个特点::1、地铁数据的前五行是无效的,......
  • git项目的地址获取及自动clone.
    痛点:项目使用的git项目过多,我的目前60多个。文件夹当时创建的时候比较杂乱。后期找项目比较困难。执行方案:迁移项目,根据git地址内的文件夹进行对应的文件夹创建,#!/usr/bin/python3#-*-coding:utf-8-*-importos,subprocessdefget_folder_list(path=os.getcwd(),......
  • python 如何获取当前时间
    python如何获取当前系统的时间1、导入包import datetime2、获取当前的时间curr_time = datetime.datetime.now()# 2019-07-06 14:55:56.873893 <class 'datetime.datetime'>curr_time.year# 2019 <class 'int'>curr_time.month# 7 <class......