vue3基于script setup语法$refs的使用

 更新时间:2022年01月25日 09:13:40   作者:快乐编程  
这篇文章主要介绍了vue3基于script setup语法$refs的使用,<BR> 在用vue3开发项目的时候,需要调用子组件的方法,于是想着用$refs来实现,但是我是使用script setup语法糖,原先vue2的语法已经不适用了。下面我们一起进入文章看详细内容吧</P><P>

一、vue2语法

vue2语法在组件上设置ref属性后,在代码里可以通过 this.$refs.ref值 访问到对应的子组件。

一个设置ref值的组件:

<base-input ref="usernameInput"></base-input>


在js代码中可以通过如下代码访问到这个组件:

this.$refs.usernameInput


可以调用里面的方法:

// 假设 base-input 组件内有方法foo
 
this.$refs.usernameInput.foo();


详细使用可以参考底部列出的参考文章。

二、vue3使用

网上找了一些文章比较零散,而且试了下都不能用,但是通过这些文章了解到了一些关键信息,最后整理出如下几步:

1. 组件设置ref值

这个和vue2的类似,父组件调用子组件的时候设置ref值。

<ChildVue ref="childRef" />

2. 组件实例获取

设置完成后,vue3可以通过ref方法获取。

const childRef = ref();


这边变量的名字需要和上面ref的一致。如何直接打印childRef,这个时候会是:

undefined

因为页面组件还没有挂载完成,所以需要在挂载完成之后才能正常使用。

onMounted(() => {
    console.log(childRef.value); // Proxy {…}
});


3. 子组件内设置对外公开的变量

上面第2步获取到子组件实例后,无法使用子组件内的方法,因为使用 script setup 的组件默认是关闭的,如果需要公开,需要使用 defineExpose 编译器宏。

// 子组件代码
const foo = () => {
  console.log("foo");
}
defineExpose({
  foo
});


父组件内调用:

// 调用子组件方法
childRef.value.foo(); // foo


这样就可以调用到子组件的方法了。

查看childRef.value,也可以看到其中公开的foo方法:

vue3父组件调用子组件方法

完整参考代码:

父组件:

<template>
    <ChildVue ref="childRef" />
</template>
 
<script setup lang="ts">
import { ref } from '@vue/reactivity';
import { onMounted } from '@vue/runtime-core';
import ChildVue from './Child.vue';
 
const childRef = ref();
console.log(childRef.value); // undefined
 
onMounted(() => {
    console.log(childRef.value); // Proxy {…}
    // 调用子组件方法
    childRef.value.foo(); // foo
});
</script>
 
<style>
</style>


子组件:

<template>child demo</template>
 
<script setup lang="ts">
const foo = () => {
  console.log("foo");
}
defineExpose({
  foo
});
</script>
 
<style>
</style>

到此这篇关于vue3基于script setup语法$refs的使用的文章就介绍到这了,更多相关vue3  $refs的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue获取当前激活路由的方法

    vue获取当前激活路由的方法

    下面小编就为大家分享一篇vue获取当前激活路由的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • ElementUI动态渲染el-table的实现过程

    ElementUI动态渲染el-table的实现过程

    在前端开发中,表格是不可或缺的一部分,无论是数据展示、数据录入,还是数据分析,表格都扮演着重要的角色,而在Vue.js生态系统中,ElementUI提供了一个强大且灵活的表格组件——el-table,本文将带你深入了解如何使用ElementUI动态渲染el-table,并详细探讨其原理及实现过程
    2024-08-08
  • vue使用axios访问本地json文件404问题及解决

    vue使用axios访问本地json文件404问题及解决

    这篇文章主要介绍了vue使用axios访问本地json文件404问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • vue基于element的区间选择组件

    vue基于element的区间选择组件

    这篇文章主要介绍了vue基于element的区间选择组件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue响应式系统的原理详解

    Vue响应式系统的原理详解

    这篇文章主要为大家介绍了Vue响应式系统的原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • vue2路由中router-view不显示的原因及踩坑记录

    vue2路由中router-view不显示的原因及踩坑记录

    这篇文章主要介绍了vue2路由中router-view不显示的原因及踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue+better-scroll 实现通讯录字母索引的示例代码

    Vue+better-scroll 实现通讯录字母索引的示例代码

    通讯录字母索引是常用的一种功能,本文主要介绍了Vue+better-scroll 实现通讯录字母索引,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • vue + ele 实现下拉选择框和下拉多选选择框处理方案

    vue + ele 实现下拉选择框和下拉多选选择框处理方案

    这篇文章主要介绍了vue + ele 实现下拉选择框和下拉多选选择框处理方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Vue3中局部组件和全局组件的使用教程详解

    Vue3中局部组件和全局组件的使用教程详解

    这篇文章主要为大家学习介绍了Vue3中局部组件和全局组件的使用方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以学习一下
    2023-07-07
  • Vue3 组件间通信之mitt实现任意组件间通信的步骤

    Vue3 组件间通信之mitt实现任意组件间通信的步骤

    mitt 主要有4个API:emit(触发某个事件)、on(绑定事件)、off(解绑某个事件)、all(获取所有绑定的事件),这篇文章主要介绍了Vue3 组件间通信之mitt实现任意组件间通信,需要的朋友可以参考下
    2024-05-05

最新评论