vue3通过ref调用子组件方法,第一次点击报找不到该方法,ref和v-if冲突

通过ref实现父子组件通信,但在第一次点击按钮的时候报找不到子组件的方法

原因:ref和v-if冲突,ref只有在组件渲染完成才注册引用信息,v-if首次为false没有把元素或子组件渲染,所以没有注册引用信息。
在这里插入图片描述
父组件

<uni-popup ref="popup" type="bottom" background-color="#fff">
    <Address ref="getAddress" v-if="popupName === 'address'" 、@close="popup?.close()" />
    <Service v-if="popupName === 'service'" @close="popup?.close()"/>
    </uni-popup>

子组件

//获取地址列表
let getMemberList = async () => {
  let res = await reqGetAddressList()
  console.log(res)
  getList.value = res.result
}
//这里因为使用了setup语法糖的形式,所以需要向外暴漏,父组件才可以进行使用
defineExpose({
  getMemberList,
})

解决办法:

  1. ref所在的标签不要用v-if,使用v-show就好了。并且ref的父级标签也不要用v-if。能用v-show就用v-show。否则就会出现找不到子组件方法
  2. 使用定时器(不推荐)
  3. 使用vue3的nextTick方法,让调用ref组件方法的逻辑放到下一个时间片执行即可。(推荐)
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中,使用ref调用组件方法有一些变化。首先,在父组件的setup函数中导入ref方法。然后,使用ref创建一个变量来引用组件。这个变量可以通过ref的.value属性来访问组件方法。例如,在父组件中,你可以这样使用ref调用组件方法: ```javascript import { ref } from 'vue' setup() { const eleTable = ref() const clickSon = () => { eleTable.value.changeShowText() // 调用组件方法 let arr = eleTable.value.tableData // 获取组件setup里面定义的变量 } return { eleTable, clickSon } } ``` 这样,你就可以通过eleTable.value来调用组件的changeShowText方法了。注意,eleTable.value是一个对象,所以你可以像上面的例中那样操作它的属性或方法。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [vue3.0中使用ref调用组件方法](https://blog.csdn.net/qq_41619796/article/details/114291319)[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.js+spring boot 计算机软件工程课程设计毕业设计 ...](https://download.csdn.net/download/Amzmks/88275824)[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、付费专栏及课程。

余额充值