vue3父组件使用子组件方法

ops/2024/9/23 10:25:28/

问题

关于父组件调用子组件方法是比较常见的情况,vue2中使用比较简单,那么vue3 中如何使用呢?
想要的效果:
在这里插入图片描述

vue2 中调用子组件方法

先看下vue2中如何调用的,代码如下:

javascript">// child.vue
<template><div style="margin-bottom:10px">子组件中的数字:{{ count }}</div>
</template><script>
export default {data(){return {count:0}},methods:{add(){this.count += 1}}
}
</script>
javascript">// 父组件
<template><child ref="childRef"/><el-button type="primary" @click="add">父组件中按钮(点击加1)</el-button>
</template><script>
import child from './child.vue'
export default {components:{child},data(){return {}},methods:{add(){this.$refs.childRef.add()}}
}
</script>

vue3 setup中调用子组件方法

使用 <script setup> 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。可以通过 defineExpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性
——Vue.js官网

示例如下:

javascript">// parent.vue
<template><child ref="childRef"/><el-button type="primary" @click="add">父组件中按钮(点击加1)</el-button>
</template><script setup>import { ref } from 'vue'import child from './child.vue'const childRef = ref(null)function add(){childRef.value.add()}
</script>
javascript">// child.vue
<template><div style="margin-bottom:10px">子组件中的数字:{{ count }}</div>
</template><script setup>import { ref } from 'vue'const count = ref(0)function add(){count.value += 1}
</script>

此时,若子组件使用如上写法则会报错:
在这里插入图片描述

解决办法:在子组件中使用defineExpose 暴露出add()方法

javascript"><template><div style="margin-bottom:10px">子组件中的数字:{{ count }}</div>
</template><script setup>import { ref } from 'vue'defineExpose({ add })  // 非常重要的一行, 暴露子组件方法const count = ref(0)function add(){count.value += 1}
</script>

http://www.ppmy.cn/ops/9706.html

相关文章

v-deep 打破作用域隔离的原理

vue 中使用 scoped 样式隔离 使用 ::v-deep 和 >>> &#xff0c;穿透作用域样式&#xff0c;以便在父组件中修改子组件的样式&#xff0c;即打破样式隔离。 vue 使用了一种叫做 scoped css 的技术来隔离组件的样式&#xff0c;确保他们不会泄漏到其他组件中&#xf…

基于Tensorflow完成mnist数据集的数字手写体识别

基于Tensorflow完成mnist数据集的数字手写体识别 关于知识背景CNNFCNN 关于数据集新的改变 关于知识背景 CNN 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种具有局部连接、权值共享等特点的深层前馈神经网络&#xff08;Feed…

go语言并发编程(五) ——Context

Context(上下文) 前言 Context是go语言中所提供的一种并发控制的解决方案,相比于管道与WaitGroup,Context可以更好的控制子孙协程以及层次更深的协程。Context本身是一个接口&#xff0c;只要我们实现了该接口都可以被称为上下文&#xff0c;context标准库本身也提供了几个实…

C#各大版本特性

总目录 C# 语法总目录 C#各大版本特性目录 C#各大版本特性C#10.0C#9.0C#8.0C#7.0C#6.0C#5.0C#4.0C#3.0C#2.0 C#各大版本特性 C#10.0 支持全局using语句&#xff1a;现在可以在整个项目中使用全局using语句&#xff0c;在所有文件中自动引用命名空间&#xff0c;不需要在每个文…

ubuntu快捷更pip源

py安装: apt-get install python3-pip终端输入: pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

最优控制理论笔记 - 03无约束条件下的泛函极值问题

一、始端时刻t0和终端时刻tf时刻都给定的泛函极值问题 其中式子2.8为欧拉方程&#xff0c;式子2.9为横截条件。 上述推导的重要作用在于将求泛函的极值问题转化为求解欧拉方程在满足边界条件和横截条件下的定解问题。 1. 固定始端和终端 2. 自由始端和自由终端 3. 自由始端和…

《QT实用小工具·三十六》metro风格的主界面

1、概述 源码放在文章末尾 该项目实现了metro风格的主界面&#xff0c;包含访客登记&#xff0c;记录查询&#xff0c;证件扫描&#xff0c;信息打印&#xff0c;系统设置&#xff0c;系统重启等功能&#xff0c;项目demo演示如下所示&#xff1a; 源码下载

Leetcode 53. 最大子数组和

心路历程&#xff1a; 子数组的和是可以通过前面的和加上当前值递推获得&#xff0c;所以可以用动态规划解决这道题 注意的点&#xff1a; 1、这道题再获取最大值时res不能用0而需要用负无穷初始化 解法&#xff1a;动态规划 class Solution:def maxSubArray(self, nums: …