vue3父组件方法之间方法的互相调用

场景描述

在项目开发中。我们可能会使用父组件调用子组件中的方法
也有可能子组件中调用父组件中的方法
下面我们来看一看组件之间方法的调用

父组件页面

<template>
  <div>
    <list-com ref="listRef"></list-com>
    <button @click="changeValue" >改变值</button>
  </div>
</template>
<script>
import listCom from "@/components/list-com.vue"
import { ref } from '@vue/reactivity'
export default {
  components:{
    listCom
  },
  setup () {
    let listRef=ref()
    function changeValue(){
      // 需要注意let listRef=ref() 不能够写在这个函数体内,
      // 否者listRef 将会找不到,因为有函数作用域
      listRef.value.fatherMess([{name:'杨洋'}])
    }
    return {changeValue,listRef}
  }
}
</script>

子组件页面

<template>
    <div>
        <h2>我是子组件</h2>
         儿子接受到的数据:{{ list.arr}}
    </div>
</template>

<script>
import { reactive } from '@vue/reactivity';
export default {
    setup () {
        let list=reactive({
            arr:[]
        })
        function fatherMess(mess){
            console.log('父组件给子组件的值',mess );
            list.arr=mess
        }
        // 虽然页面上没有使用这个函数,
        // 但是也要抛出去,否者父组件会报错 fatherMess is not a function 
        return {fatherMess,list}
    }
}
</script>

出现 Uncaught TypeError: listRef.value.fatherMess is not a function 如何解决

出现这样的错误,是因为子组件中的事件 fatherMess函数。
并没有抛出出去哈
解决办法 子组件中  return {fatherMess}

子组件调用父组件中的方法

子组件

<template>
    <div>
        <h2>我是子组件</h2>
        <button @click="getHander" >获取值</button>
    </div>
</template>
<script>
import { reactive } from '@vue/reactivity';
export default  {
    setup (props,{attrs,slots,emit}) {
        function getHander(){
            // 不能够在使用原来的 this.$partent.xxx()这种方式了
            emit('myclick','给父组件的值' )
        }
        return {getHander}
    }
}
</script>

父组件

<template>
  <div>
    <list-com  @myclick="myclick"></list-com>
  </div>
</template>

<script>
import listCom from "@/components/list-com.vue"
export default {
  components:{
    listCom
  },
  setup () {
    function myclick(mess){
      console.log(mess);
    }
    return {myclick}
  }
}
</script>

posted @   南风晚来晚相识  阅读(2367)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示