在vue2中,子组件调用父组件,直接使用this.$emit()即可。

但是在vue3中,很显然使用this.$emit() 已经开始报错了,为什么会报错呢?

原因是:在vue3中setup是在声明周期beforeCreate和created前执行,此时vue对象还未创建,因此我们无法使用this。

那么我们在vue3中,子组件该如何调用父组件的函数呢?

方法一:

首先写一个 Child.vue,重点在 setup 函数中引入 context 形参,配合 emit 使用。定义了两个函数,toFatherNum(), toFatherObject() 分别向父组件传递数字和对象

<template><a-button @click="toFatherNum">子传父数字</a-button><a-button @click="toFatherObject">子传父对象</a-button>
</template><script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({name: "Child",setup(props, context) {function toFatherNum() {context.emit('eventIsNum', 888)}function toFatherObject() {context.emit('eventIsObject', { keyName: 'I am value' })}return{toFatherNum,toFatherObject,}}
})
</script><style scoped></style>

然后是 Father.vue,通过事件名称 eventIsNum 和 eventIsObject 接收子组件传递的值

<template><Child@eventIsNum="receiveChildNum"@eventIsObject="receiveChildObject"></Child>
</template><script lang="ts">
import { defineComponent } from 'vue'
import Child from "./Child.vue";
export default defineComponent({name: "Father",components: {Child,},setup() {function receiveChildNum(e: number) {console.log(e, '接收子组件数字');}function receiveChildObject(e: object) {console.log(e, '接收子组件对象');}return {receiveChildNum,receiveChildObject,}}
})
</script><style scoped></style>

方法二:
1.在子组件里引入useContext
import { useContext } from "vue";
2.获取上下文
const ctx = useContext();
3.在需要调用父组件的地方写上下面的代码进行调用
ctx.emit(‘fatherMethod’); //fatherMethod 是想要调用父组件的一个方法

方法一和二 供大家随意挑选哦!如果大家有更好的方法,欢迎大家评论留言或私信。
希望大家一起进步哟。

vue3.0 子组件调用父组件中的方法相关推荐

  1. js代码 父页面调用子页面中的js方法,子页面调用父页面中的js方法

    文中代码亲测可用,转载以示尊重!!! <!--主页面中的JS代码--> <script type="text/javascript"> //调用子页面的方法 ...

  2. vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法

    vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...

  3. vue 子页面调用父页面的参数_Flutter子组件调用父组件方法修改父组件参数

    子组件调用父级组件方法的主要实现是父组件给子组件传入一个方法,然后在子组件中调用父级方法来修改父级的参数.看一下效果图 父级组件实现 在父级组件中写一个_editParentText的方法来修改组件中 ...

  4. vue+element 子组件调用父组件失败

    项目中遇到vue子组件调用父组件的方法,我写的是this.$emit('search');但是没有成功,查了下说有三种子组件调用父组件的方式: 第一种方法是直接在子组件中通过this.$parent. ...

  5. vue 子组件调用父组件方法、值(父传子);父组件调用子组件方法、值(子传父)。

    一.子组件调用父组件方法(父传子-方法) 场景:子组件是弹出框组件.当点击确定时,将新增的值增加到父组件的列表.就要调用父组件的getLIst()方法. 代码: //父组件 利用@子组件方法名=&qu ...

  6. vue子组件调用父组件内的方法

    子组件调用父组件方法 随笔:后面时间充足了再补充 父组件 <template><div><head-title3 ref="headerNews3"& ...

  7. react typescript 子组件调用父组件

    //父组件 import * as React from 'react'import { Input } from 'antd'const Search = Input.Searchimport &q ...

  8. 使用 this.$parent 子组件调用父组件方法

    子组件调用父组件里的方法(报错:Uncaught TypeError: this.$parent.getUserList is not a function) 参考文章链接: https://blog ...

  9. vue子组件调用父组件方法 回调

    子组件调用父组件方法,父组件执行完后,进行回调,代码如下: 子组件this.$emit('change', this.dataList, (loading) => {this.loading = ...

最新文章

  1. 设计模式的征途—17.模板方法(Template Method)模式
  2. Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】...
  3. wxWidgets:wxTreeCtrl 示例
  4. stm8s103k3 周期 捕获_STM8S103K3 - 主流基本型系列8位MCU,具有8 KB Flash、16 MHz CPU和集成EEPROM - STMicroelectronics...
  5. java报错空指针异常_夯实基础:认识一下这10 个深恶痛绝的 Java 异常
  6. 实战01_SSM整合ActiveMQ支持多种类型消息
  7. Android开发基础(四大组件及Intent)
  8. 创建一个显示所有预定义系统颜色的ListBox
  9. 【车间调度】基于matlab多层编码遗传算法求解车间调度问题【含Matlab源码 035期】
  10. TwinCAT软件编码器参数介绍
  11. Excel的科学计数法
  12. HTML基础-跟着李南江学编程
  13. 计算机安装xp蓝屏怎么办,xp蓝屏,详细教您教你怎么修复xp蓝屏问题
  14. 人生不过一场旅行,你路过我,我路过你
  15. C/C++结构体内存对齐问题
  16. openEuler虚拟机配置yum源
  17. IP核的使用之ROM(Vivado)
  18. 【HTML + CSS】模仿腾讯云页面——初步实现
  19. 刷表法 和 填表法(DP)
  20. 摩托罗拉ap6521恢复出厂_moto AP6521 配置命令

热门文章

  1. winamp 5.55下载_免费下载:Winamp 5.8 Beta已正式发布,现在对Llama友好
  2. navbar-default、navbar-brand(logo栏)、navbar-text
  3. 【开源】用ESP32制作一个桌面天气预报站
  4. 考电工证答题技巧?电工资格考试真题试卷答案?
  5. 中兴视觉大数据投资70亿元在武汉建设中兴智能光谷产业基地
  6. 医院排队叫号系统源码 分诊排队管理系统源码HIS源码
  7. 阿里终结裁员危机!坚决不拿 10 万阿里人祭天!
  8. Linux capstone 反汇编引擎使用方法
  9. 保时捷叫板特斯拉 这款售价150万的首款电动车能成吗?
  10. 瞎说springboot