我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue3父子组件互调方法的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue3父子组件互调方法的实现

下面演示均为使用 setup 语法糖的情况!

一、父组件调用子组件方法

下面演示为使用 setup 语法糖的情况,值得注意的是子组件需要使用 defineExpose 对外暴露方法,父组件才可以调用!

1、子组件

<template>
</template>

<script setup lang="ts">
// 第一步:定义子组件里面的方法
const doSth = (str: string) => {
  console.log("子组件的 doSth 方法执行了!" + str);
}
// 第二步:暴露方法
defineExpose({ doSth })
</script>

<style scoped>
</style>

2、父组件

<template>
  <button @click="getChild">触发子组件方法</button>
  <!-- 第一步:定义 ref -->
  <HelloWorld ref="childRef" />
</template>

<script setup lang="ts">
// 一、导入
import { ref } from 'vue';
import HelloWorld from './components/HelloWorld.vue';

// 二、数据
// 第二步:定义与 ref 同名变量
const childRef = ref<any>();

// 三、函数
const getChild = () => {
    // 第三步: 调用子组件的方法或者变量,通过value
    childRef.value.doSth("随便传值!");
}
</script>

<style>
</style>

3、测试结果

请添加图片描述

4、关于 defineExpose 的官方文档

网址:https://v3.cn.vuejs.org/api/sfc-script-setup.html#defineexpose

defineExpose

使用 <script setup> 的组件是默认关闭的,也即通过模板 ref 或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。

为了在 <script setup> 组件中明确要暴露出去的属性,使用 defineExpose 编译器宏:

<script setup>
import { ref } from 'vue'

const a = 1
const b = ref(2)

defineExpose({
  a,
  b
})
</script>

当父组件通过模板 ref 的方式获取到当前组件的实例,获取到的实例会像这样 { a: number, b: number } (ref 会和在普通实例中一样被自动解包)。

二、子组件调用父组件方法

1、子组件

<template>
</template>

<script setup lang="ts">
import { onMounted } from "@vue/runtime-core";
const emit = defineEmits([ "doSth" ]);
const doSth = () => {
  emit('doSth');
}
onMounted(() => {
  doSth();
});
</script>

<style scoped>
</style>

2、父组件

<template>
  <!-- 第一步:使用 @do-sth 或 @doSth 接受方法 -->
  <HelloWorld @doSth="sayHello" />
</template>

<script setup lang="ts">
// 一、导入
import HelloWorld from './components/HelloWorld.vue';

// 二、函数
// 第二步: 自定义方法
const sayHello = () => {
  console.log("hello world!");
}
</script>

<style>
</style>

3、测试结果

请添加图片描述

4、关于 defineEmits 的官方文档

网址:https://v3.cn.vuejs.org/api/sfc-script-setup.html#defineprops-和-defineemits

definePropsdefineEmits

<script setup> 中必须使用 definePropsdefineEmits API 来声明 propsemits ,它们具备完整的类型推断并且在 <script setup> 中是直接可用的:

<script setup>
const props = defineProps({
  foo: String
})

const emit = defineEmits(['change', 'delete'])
// setup code
</script>
  • defineProps 和 defineEmits 都是只在 <script setup> 中才能使用的编译器宏。他们不需要导入且会随着 <script setup> 处理过程一同被编译掉。
  • defineProps 接收与 props 选项相同的值,defineEmits 也接收 emits 选项相同的值。
  • defineProps 和 defineEmits 在选项传入后,会提供恰当的类型推断。
  • 传入到 defineProps 和 defineEmits 的选项会从 setup 中提升到模块的范围。因此,传入的选项不能引用在 setup 范围中声明的局部变量。这样做会引起编译错误。但是,它可以引用导入的绑定,因为它们也在模块范围内。

如果使用了 Typescript,使用纯类型声明来声明 prop 和 emits 也是可以的。

到此这篇关于Vue3父子组件互调方法的实现的文章就介绍到这了,更多相关Vue3父子组件互调内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue3父子组件互调方法的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue3父子组件互调怎么实现

今天小编给大家分享一下Vue3父子组件互调怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、父组件调用子组件方法下面
2023-06-30

React父组件怎么调用子组件的方法

调用方法:1、类组件中的调用可以利用React.createRef()、ref的函数式声明或props自定义onRef属性来实现;2、函数组件、Hook组件中的调用可以利用useImperativeHandle或forwardRef抛出子组件ref来实现。
2023-05-14

Angular中父子组件相互传参的方法

这篇文章将为大家详细讲解有关Angular中父子组件相互传参的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一 :父组件获取子组件的数据和方法也就是说 子组件给父组件传数据和方法通过ViewChild
2023-06-07

详解Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)

这篇文章主要介绍了Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用),在vue2中ref被用来获取对应的子元素,然后调用子元素内部的方法,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
2022-11-13

Vue3父子组件间通信、组件间双向绑定的方法

本文内容提要父子组件可通过事件进行通信携带参数的事件发送和监听回调使用组件的emits板块整理组件事件使用组件emits板块的Object形式校验外传的参数值结合$emit、v-bind与v-model实现父子组件通信(数据双向绑定)结合$emit、v-bind与v-model实现父子组件通信(多个字段的应用案例)自己设置修饰符试验this.modelModifiers的作用下面在子组件的点击回调handleClick()中,通过this.modelModifiers.[自己设置修饰符名]实现自
2023-05-15

vue实现父子组件间数据交互的方式是什么

本文小编为大家详细介绍“vue实现父子组件间数据交互的方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue实现父子组件间数据交互的方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。父子组件之间的
2023-07-04

Vue实现父子组件传值的方法是什么

这篇文章主要介绍了Vue实现父子组件传值的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue实现父子组件传值的方法是什么文章都会有所收获,下面我们一起来看看吧。父传子通过 props。props 就
2023-07-05

编程热搜

目录