Vue3.x 父组件Setup、Ref操纵子组件中的元素&方法

vue3.0中使用ref来调用子组件的方法 前言: vue3.0中ref的使用和vue2.0中的ref相比较也有很大的改变,这里总结下他的具体使用方法。 vue2.0 父组件: template <Table ref="eleTable" @handle="handleFun"></Table> methods: this.$refs.eleTable.子组件的方法名+() this.$refs.eleTable.子组件的属性名 vue3.0 父组件: template <T... 阅读详情
AI摘要

本文介绍了在Vue3中如何通过`defineComponent`和`setup`语法糖实现父子组件间的通信。针对使用`ref`操纵DOM时遇到的问题,提供了两种解决方案。在`defineComponent`中,需要将子组件的方法返回;而在`setup`中,则需使用`defineExpose`将方法暴露给父组件。这两个方法帮助开发者更好地理解和掌握Vue3中的组件通信机制。


小伙伴们在开箱Vue3的过程中一点会踩到不少坑。

比如很多小伙伴想要通过ref来操纵DOM,可偏偏翻车。

这里分享两个常用的方法,使用以下两个例子为例。

父组件

<template>
	<child ref="childRef"></child>
</template>
<script setup>
import { ref } from "vue";
// 引入子组件
import child from "./child.vue";
// 获取子组件
const childRef = ref(null);
const fun = () => {
	childRef.value.childFun();// 调用子组件的方法
}
</script >

方法一:

defineComponent

如果你使用的是defineComponent定义组件的方法,

那么除了在父组件绑定ref="childRef"外,最关键在于你需要把你想要在父组件中控制的方法return出去。

//子组件一 child
<template>
  <div>
    <a-modal title="Title" v-model:visible="visible" :confirm-loading="confirmLoading" @ok="handleOk">
      <p>{{ modalText }}</p>
    </a-modal>
  </div>
</template>
<script lang="ts">
import { ref, defineComponent } from 'vue';

export default defineComponent({
  setup() {
    const modalText = ref<string>('Content of the modal');
    const visible = ref<boolean>(false);
    const confirmLoading = ref<boolean>(false);

    const childFun = () => {
      visible.value = true;
    };

    const handleOk = () => {
      modalText.value = 'The modal will be closed after two seconds';
      confirmLoading.value = true;
      setTimeout(() => {
        visible.value = false;
        confirmLoading.value = false;
      }, 2000);
    };
    return {
      modalText,
      visible,
      confirmLoading,
      childFun,
      handleOk,
    };
  },
});
</script>

在这里插入图片描述

方法二:

setup语法糖

如果你使用的setup导出定义组件的方法,你就需要把将要在父组件中使用的数据和方法使用defineExpose暴露出去。

// 子组件
<script setup>
import { defineExpose } from 'vue'
const childFun = () => {
	console.log('我是子组件方法')
}
// 重点!!这里需要使用defineExpose暴露出去
defineExpose({
	childFun
})
</script>

Vue 3 中的灵活API管理:深入探讨 defineExpose 特性 随着 Vue.js 3 的发布,开发者们迎来了一系列强大的新特性,其中之一便是 defineExpose。这个特性为组件提供了更加灵活和清晰的外部接口管理方式,使得组件的开发和使用更为优雅。本文将深入剖析 defineExpose 的语法、示例、应用场景、优势劣势,以及最佳实践,旨在为开发者提供全面的指南,助力他们更好地掌握和运用这一 Vue 3 特性。通过深度解析,我们将带领读者领略 defineExpose 的强大之处,为构建更具可维护性和可读性的 Vue 3 组件提供宝贵的经验。 阅读详情

相关推荐

Vue 3新特性解析:在setup函数中获取元素引用

其中一个令人兴奋的新特性是在Vue 3的setup函数中获取元素引用的能力。在本文中,我们将详细介绍如何使用这个新语法,并提供相应的源代码示例。在Vue 3之前的版本中,我们通常使用ref()函数来获取DOM元素的引用。但是,在Vue 3中,我们可以直接在setup函数中使用新的。这样,我们就可以在setup函数中获取其他组件属性的引用,并对其进行操作。函数来获取元素引用。这是一个非常方便的特性,因为在组件的生命周期内,我们经常需要直接操作DOM元素。需要注意的是,在setup函数内部,我们不能直接使用。

AvskBug的博客 525

Vue3 setup中使用$refs

在 Vue 3 中的 Composition API 中,$refs并不直接可用于setup函数。这是因为$refs是 Vue 2 的实例属性,而在 Vue 3 中,setup函数是与模板实例分离的,不再使用实例属性。实际工作中确实有需求,在setup函数使用$refs,下面有两种方法。

瑾修的博客 5003

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 497

Vue3在setup中获取元素引用(ref)

在非setup钩子中, 我们可以通过this.$refs来获取指定元素,但是setup中没有"this",所以要用其他方式来获取元素。在setup函数中,可以使用ref函数,用于创建一个响应式数据,当数据发生改变时,Vue会自动更新UI一定要注意,ref创建的是一个响应式数据。这个在VUE3.0中非常灵活,几乎是怎么玩都行的。具体后边还会说到,这里大概说一下基本用法。1、引入ref2、使用注意点。

不怕麻烦的鹿丸的博客 1万+

Office如何通过VSTO进行WORD插件开发?

VSTO(Visual Studio Tools for Office )是VBA的替代,是一套用于创建自定义Office应用程序的Visual Studio工具包。VSTO可以用Visual Basic 或者Visual C#扩展Office应用程序(例如Word、Excel、PPT)。本文通过VSTO进行Word插件开发总结,并进行记录。

【cacrle】的博客 7320

USRP N210与MATLAB连接实战:从驱动安装到信号接收

本文详细介绍了USRP N210与MATLAB连接的完整流程,涵盖驱动安装、网络配置、支持包安装及信号接收实战。重点解决了安装过程中的常见错误和硬件连接问题,并通过MATLAB代码示例展示了如何配置接收器、处理信号数据,帮助用户快速实现从设备对接到信号分析的全过程。

blue的专栏 821

【踩坑】Vue3 setup中如何使用$refs

Vue3 引导大家使用 setup 方法以同步的方式组织逻辑,实质上编写方式与2.X时代发生了巨大变化。同步意味着 setup 方法中无法使用 this( this 并不指向当前组件实例 ),我们需要使用 vue3 中暴露出来的方法来实现vue的一些功能 (比如computed)如下: &lt;script setup&gt; import {computed,ref} from 'vue' const num = ref(10) const status = computed(()=&gt;num.val

web18296061989的博客 2810

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1124

vue3模板动态ref使用,获取子组件元素

我们在平时做业务的时候,父子组件通信会经常用到ref(我比较喜欢用这个方式,传值方便,省去一堆的watch或者computed) 当我们在列表调用子组件的时候,就会用到动态ref。比如: 我点击计划任务,每一行的计划任务点开都使用的同一个组件popover,如果如果我们模板使用同一个ref,即: 这样调用,可以打开popover,但是很多时候,点击的和打开的不是同一个。这个时候,就需要我们将每一个ref都唯一,这个时候,我们就会用到动态ref.......

qq_41261490的博客 3907

一个基于fluent超声振动仿真算例分析(含有UDF的编写设定)

一个基于Fluent的超声防堵算例

Lvyou2008的博客 2511

LCL滤波器参数设计实战:从理论约束到工程选型指南

本文提供了LCL滤波器参数设计的实战指南,从理论约束到工程选型逐步拆解。核心在于平衡总电感量、电感比与电容值,确保谐振频率落在安全区间,以满足并网电流谐波标准并维持系统稳定。文章以10kW并网逆变器为例,给出了具体的参数计算流程与选型步骤,并强调了寄生参数、阻尼设计等工程实现细节。

c6d7e8f9g的博客 922

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

vue3 如何获取到子元素,并调用方法。//调用子组件方法。

卡尔特斯 2400

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1771

vue3 父传子 子传父; Vue3在父组件中触发子组件的方法

vue3 父传子 子传父

jack_rose_me的博客 1722

【华为OD机试】创建二叉树(python, java, c++, js)

请按下列描达构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为i 的子节点: 若node 无「左子节点」。则添加左子节点; 若node 有「左子节点」但无「右子节点」,则添加右子节点: 否则不作任何处理。 height、index 均从0开始计数;index 指所在层的创建顺序。

A_D_I_D_A_S的博客 188

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在 Vue3 的 setup 中使用 $refs

在 Vue3 的 setup 中使用 $refs

weixin_52169403的博客 1369

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vue2升级vue3:单文件组件概述 及 defineExpos/expose

像我这种react门徒被迫迁移到vue的,用管了TSX,地vue单文件组件也不太感冒,但是vue3单文件组件,造了蛮多api,还不得去了解下、没有什么好说的,就是setup中定义props与emits。、它会返回与setupContext.slots和setupContext.attrsnameprops{typeFunction,},},emits}})...

周陆军的博客,分享it技术。 2129

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue3访问子组件的 DOM 元素的方法总结

在 Vue 3 中,访问子组件的 DOM 元素是一个常见的需求。本文将介绍如何在 Vue 3 中使用不同的方法来获取子组件的 DOM 元素。

kilig_CSM的博客 5744

【vue3 $refs和特殊attr:ref 】获取子组件实例 & 规范获取Dom元素;(统称模板引用)

ref用来给元素或子组件注册引用信息。注册内容会在父组件的$refs对象上。如果在普通的 DOM 元素上使用,引用指向的就是那个 DOM 元素;如果用在子组件上,引用就指向组件实例! 关于ref的重要说明:在初始化组件时你不能访问ref 绑定的对应内容——它们还不存在!$refs也是非响应式的,因此你不应该试图用它在模板中做数据绑定。 尽管存在 prop 和事件,但有时你可能仍然需要在 JavaScript 中直接访问子组件。为此,可以使用refattribute 为子组件指定引用

从今年开始写写博客~~ 7908

在VUE3的setup函数中如何引用($ref)Html页面元素

如何在vue3中,在setup函数中使用ref来引用页面元素

球球不吃虾WHR2349博客 4218

【vue3 新特性 expose 使用与讲解】options和composition api的defineExpose案例

expose 类型:Array<string> vue3新特性,如果是options api类型的组件,不声明 expose 时,默认暴露当前组件实例的全部内容,声明了 expose 选项, expose 数组内标记的才会暴露。(expose:[]则什么都不暴露,注意这个问题。也可以利用这个特性提高组件使用的规范。) <script setup>setup语法糖的情况下,默认是封闭的,需要获取当前组件里的内容的话,必须显式expose出去 TS类型:

从今年开始写写博客~~ 1万+

在Vue3中如何快捷的操作dom元素(改样式、加事件等等)

在vue3中更加简便的操作dom元素来改样式等等

2301_76603086的博客 3051

Vue中ref的使用

Vue中ref的使用方法;

hdwddadsf的博客 211

使用ref获取DOM元素 [可以用于父组件向子组件传值]

ref的两种用法 1.ref 加在普通的元素上,用this.ref.name 获取到的是dom元素 2.ref 加在子组件上,用this.ref.name 获取到的是组件实例,可以使用组件的所有方法。 案例1:ref 加在普通的元素上 &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;script src=&quot;~/Scripts/vue.js&quot;&amp;gt;&amp;lt;/scri...

Fanbin168的专栏 3904

vue3使用<script setup>语法糖后如何在父组件用ref调用子组件的方法

vue3使用 setup 语法糖后如何在父组件用ref调用子组件的方法 什么是setup语法糖 根据vue3.x 官方解释 script 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。相比于普通的 script语法, 它具有更多优势: 更少的样板内容,更简洁的代码。 能够使用纯 Typescript 声明 props 和抛出事件。 更好的运行时性能 (其模板会被编译成与其同一作用域的渲染函数,没有任何的中间代理)。 更好的 IDE 类型推断性能 (减少语言服务器从代码中抽离类

weixin_45498167的博客 4672

VUE3子组件-业务代码优化

Vue 3组件的主要优势之一就是它们可以帮助你将你的应用程序分解成可维护和可重用的部分。当你在应用程序中多次使用相同的代码时,你可以将它们抽象成一个组件,然后在应用程序中的多个地方使用该组件,而不必每次都编写相同的代码。最近写前端代码,有些功能代码可以复用,于是尝试使用子组件方式优化代码。总结主要有两个使用方向一:像方法一样调用传递参数,调用组件(打开一个可复用的复杂详情页)

qq_42583549的博客 878
上一篇: Vue3引入彩色阿里巴巴Iconfont图标
下一篇: Vue3.x使用Cavans画布封装动态验证码组件
Boriska1996
博客等级 码龄7年 22粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值