关于在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
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值