当前位置: 首页 > article >正文

关于在vue3中的动态组件component标签上给ref属性动态赋值的问题

        前言:此问题困扰我已久,每次都是本地运行没问题,但发布到线上之后就获取不到动态组件的ref对象。

        之前的错误写法,本人前端经验不足,拿着老旧的思维逻辑拼凑,这种情况下在本地运行环境是可以实现点击下一步进行切换的,但打包压缩发布到线上之后,就失效了

<keep-alive>
      <component :is="activeValue" :ref="stepList[activeId].refName"  />
</keep-alive>    


 <el-button @click="handleCreatNext()" type="primary">下一步</el-button>

const Component1Ref = ref()
const Component2Ref = ref()

const stepList = ref([
  {
    id: 0,
    label: '子组件1',
    value: shallowRef(Component1),
    refName: 'Component1Ref'
  },
  {
    id: 1,
    label: '子组件2',
    value: shallowRef(Component2),
    refName: 'Component2Ref'
  }])

const handleCreatNext = async () => {
if (activeId.value == 0) {
    //处理步骤1的逻辑
    await Component1Ref.value.formRef.validate()
} else if (activeId.value == 1) {
    // 处理步骤2的逻辑
}
    if (activeId.value++ > 3) activeId.value = 0
  activeValue.value = stepList.value[activeId.value].value
}

正确做法请参考:

<keep-alive>
      <component :is="activeValue" :ref="(el) => currentComponent = el"  />
</keep-alive>    


 <el-button @click="handleCreatNext()" type="primary">下一步</el-button>

const currentComponent = ref(Component1);

const stepList = ref([
  {
    id: 0,
    label: '子组件1',
    value: shallowRef(Component1),
    refName: 'Component1Ref'
  },
  {
    id: 1,
    label: '子组件2',
    value: shallowRef(Component2),
    refName: 'Component2Ref'
  }])

const handleCreatNext = async () => {
 await nextTick();
if (activeId.value == 0) {
    //处理步骤1的逻辑
    await currentComponent.value.formRef.validate()
} else if (activeId.value == 1) {
    // 处理步骤2的逻辑
}
    if (activeId.value++ > 3) activeId.value = 0
  activeValue.value = stepList.value[activeId.value].value
}


http://www.kler.cn/a/572896.html

相关文章:

  • Java进阶-SpringCloud设计模式-工厂模式的设计与详解
  • 原型链与继承
  • 【RAG 篇】万字长文:向量数据库选型指南 —— Milvus 与 FAISS/Pinecone/Weaviate 等工具深度对比
  • 软考架构师笔记-进程管理
  • 自动驾驶---不依赖地图的大模型轨迹预测
  • AI与.NET技术实操系列
  • Python:函数的各类参数以及函数嵌套
  • Mono里运行C#脚本44—System.Console.WriteLine()函数的生成过程
  • L2-001 紧急救援
  • CS144 Lab Checkpoint 0: networking warm up
  • java数据结构_Map和Set_HashMap 底层源码解读_9.5
  • python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据
  • 前端练习项目:html css js 开发AI数字人平台官网前端静态页面
  • 【AIGC】通义万相 2.1 与蓝耘智算:共绘 AIGC 未来绚丽蓝图
  • 设备管理系统功能与.NET+VUE(IVIEW)技术实现
  • 神经网络之CNN文本识别
  • 在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口
  • MyBatis-Plus 条件构造器的使用(左匹配查询)
  • Windows零门槛部署DeepSeek大模型:Ollama+7B参数模型本地推理全攻略
  • alpine linux 系统最新版安装及使用教程