vue父组件调用子组件方法报错问题及解决

 更新时间:2022年09月05日 08:39:49   作者:小刘加油!  
这篇文章主要介绍了vue父组件调用子组件方法报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue父组件调用子组件方法报错

在父组件定义了一个tab标签页,每一个标签页下面都调用不同的组件,

如下图所示:

子组件中定义的方法:

setup() {
	const getList = () =>{
		const date = moment(new Date()).format('YYYY-MM')
		loading.value = true
		apiGetPageList({
                salaryDate: date,
                page: state.pagination.page,
                limit: state.pagination.limit,
                jobNo: state.formState.searchValue ? state.formState.searchValue : null
            }).then((res: any)=> {
                if (res.data.status == 200) {
                    state.dataSource = res.data.data.rows
                    state.pagination.total = res.data.data.total
                } else {
                    Message.error(res.data.message ? res.data.message : "获取数据失败")
                }
            }).finally(()=>{
                loading.value = false
            })
	}
	return {
		getList
	}
	
}

父组件中使用tab标签页的change方法,每次点击不同tab页的时候,都会调用该子组件的获取列表数据的接口。

一开始的思路是:在父组件中调用子组件的时候使用ref属性,通过ref拿到子组件的方法,然后在change方法中进行调用。但在实际开发中,却出现了问题,切换到tab页时,控制台会报错,如下所示:

这个是因为异步执行的原型,子组件还没渲染完就调用方法会出现这样的情况。在网上百度了下解决方法,只需要在子组件中定义的方法中加上this.$nextTick就可以解决。

这种方法的确可以,但我试了试另一种方法:在父组件中的change方法中加上nextTick,想验证下是否能够解决,结果是能够正常调用。

代码如下所示:

setup() {
	const changeTab = (active: any) => {
            switch (active) {
                case "2":
                    console.log(33333,areaWorkDay)
                    nextTick(()=>{
                        areaWorkDay.value.editTableData = {}
                        areaWorkDay.value.getPageList()
                        areaWorkDay.value.formRef.resetFields()
                    })
                    break;
                case "3":
                    console.log(111,monthSalaryRef)
                    // monthSalaryRef.value.$emit('getList')
                    nextTick(()=>{
                        monthSalaryRef.value.editTableData = {}
                        monthSalaryRef.value.getList()
                        monthSalaryRef.value.monthRef.resetFields()
                    })
                    break;
            }
        }
       	return {
       		changeTab
		}
}

这样也可以解决父组件调用子组件的时候,因为异步执行,子组件方法还没初始化完成,导致控制台报错的问题。

vue父组件调用子组件方法及遇到的问题

在子组件methods选项中定义方法method(),在父组件中引用子组件,并在子组件标签中定义ref=‘xxx’,使用this.$refs.xxx.method()调用子组件方法。

但chrome控制台报错该方法undifined,原因是因为使用ref调用子组件是调用的实例,但调用时该实例还未加载完,因此调用的方法undifined。

解决方法:在父组件中调用时,先加载完组件实例再调用方法:

this.$nextTick( () => {
    this.$refs.xxx.method()
} )

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue中使用better-scroll实现轮播图组件

    Vue中使用better-scroll实现轮播图组件

    better-scroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。这篇文章主要介绍了Vue中使用better-scroll实现轮播图组件的实例代码,需要的朋友可以参考下
    2020-03-03
  • 在vue中嵌入外部网站的实现

    在vue中嵌入外部网站的实现

    这篇文章主要介绍了在vue中嵌入外部网站的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue3 ref获取不到子组件的解决方法

    vue3 ref获取不到子组件的解决方法

    在父组件内调用子组件内的事件从而改变子组件的某些状态,父子组件使用<script setup>语法糖,父组件通过给子组件定义ref访问其内部事件,本文给大家介绍了vue3 ref获取不到子组件的解决方法,需要的朋友可以参考下
    2024-06-06
  • 修改vue+webpack run build的路径方法

    修改vue+webpack run build的路径方法

    今天小编就为大家分享一篇修改vue+webpack run build的路径方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue加载天气组件使用方法详解

    vue加载天气组件使用方法详解

    这篇文章主要为大家详细介绍了vue加载天气组件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Vue 3.0 中 hooks 的概念示例详解

    Vue 3.0 中 hooks 的概念示例详解

    在Vue3.0框架中,hooks函数允许将组件逻辑抽离复用,提高代码的可维护性和复用性,通过封装逻辑如获取数据、处理状态等,hooks使得组件开发更加高效和清晰,示例中,useDog.ts用于获取狗狗图片,展示了hooks封装数据和逻辑、响应式数据和异步操作的能力
    2024-10-10
  • vue路由前进后退动画效果的实现代码

    vue路由前进后退动画效果的实现代码

    这篇文章主要介绍了vue路由前进后退动画效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • element中async-validator异步请求验证使用

    element中async-validator异步请求验证使用

    本文主要介绍了element中async-validator异步请求验证使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • vue2.0与bootstrap3实现列表分页效果

    vue2.0与bootstrap3实现列表分页效果

    这篇文章主要为大家详细介绍了vue2.0与bootstrap3实现列表分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 基于Vue 2.0的模块化前端 UI 组件库小结

    基于Vue 2.0的模块化前端 UI 组件库小结

    AT-UI 是一款基于 Vue.js 2.0 的轻量级、模块化前端 UI 组件库,主要用于快速开发 PC 网站产品。下面通过本文给大家介绍Vue 2.0的模块化前端 UI 组件库,需要的朋友参考下吧
    2017-12-12

最新评论