在vue3中,可以使用vue3的API defineExpose()函数结合ref或者$parent,实现父子组件数据的传递。

子组件向父组件传递数据defineExpose()ref

  • 子组件:通过defineExpose() 函数,向外暴露响应式数据或者方法
// src/components/son.vue
<template>
<div>
<h1>儿子有 ${{ son_money }}</h1>
</div>
</template> <script setup lang="ts">
import { ref } from 'vue'; // 1-定义子组件内部的响应式数据
const son_money = ref(500); // 2-定义子组件内部的方法
function queryMoney() {
alert('儿子还有 $' + son_money.value);
} // 3-重点:把子组件中的数据或者方法暴露出去
defineExpose({
son_money,
queryMoney
});
</script>
  • 父组件:通过ref获取子组件实例,进而获取子组件暴露的响应式数据或方法
// src/App.vue
<template>
<div>
<h1>父组件</h1>
<button @click="querySon">看看儿子有多少钱</button>
<button @click="giveSon">给儿子打50块钱</button>
<hr>
<!-- 2-使用子组件 -->
<Son ref="son" />
</div>
</template> <script setup lang="ts">
import { ref } from 'vue';
// 1-引入子组件
import Son from './components/son.vue'; // 3-获取子组件的实例
const son = ref(); function querySon() {
// 4-重点:调用子组件暴露的 queryMoney()方法
son.value.queryMoney();
} function giveSon() {
// 5-重点:查改子组件暴露的数据 son_money
son.value.son_money += 50;
}
</script>

你没看错!这里的ref就是经常用来定义响应式数据的那个ref ,所以在script 标签中使用,需要带上.value

ref 的两个作用:

  • 定义响应式数据
  • 获取子组件实例

父组件向子组件传递数据defineExpose()$parent

  • 父组件:通过defineExpose() 函数,向外暴露响应式数据或者方法
// src/App.vue
<template>
<div>
<h1>父组件有 ${{ money }}</h1>
<hr>
<!-- 2-使用子组件 -->
<Daughter />
</div>
</template> <script setup lang="ts">
import { ref } from 'vue'; // 1-引入子组件
import Daughter from './components/daughter.vue'; // 3-定义父组件响应式数据
const money = ref(1000); // 4-定义父组件里的方法
function borrowMoney() {
money.value -= 100;
return 100;
} // 5-重点:暴露父组件的数据和方法
defineExpose({
money,
borrowMoney
});
</script>
  • 子组件:通过监听事件和$parent ,获取父组件向外暴露的响应式数据或者方法
<template>
<div>
<h1>我是子组件,我有 ${{ dau_money }}</h1>
<!-- 1-重点:通过事件接收 $parent -->
<button @click="borrow($parent)">向父组件借100块</button>
</div>
</template> <script setup lang="ts">
import { ref } from 'vue'; // 定义子组件响应式数据
const dau_money = ref(0); // 2-重点:通过$parent,拿到父组件暴露的数据与方法
function borrow($parent: any) {
// $parent 里就有父组件暴露的 money属性 和 borrowMoney()方法
// console.log($parent); // 3-重点:调用父组件暴露的 borrowMoney()方法
dau_money.value += $parent.borrowMoney();
// 4-重点:可以查改父组件暴露的数据 money
console.log('父组件还有 $' + $parent.money);
}
</script>

vue3探索——使用ref与$parent实现父子组件间通信的更多相关文章

  1. vue之父子组件间通信实例讲解(props、$ref、$emit)

       组件间如何通信,也就成为了vue中重点知识了.这篇文章将会通过props.$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信. 组件是 vue.js 最强大的功能之一,而组件实例 ...

  2. Vue的父子组件间通信及借助$emit和$on解除父子级通信的耦合度高的问题

    1.父子级间通信,父类找子类非常容易,直接在子组件上加一个ref,父组件直接通过this.$refs操作子组件的数据和方法    父 这边子组件中 就完成了父 => 子组件通信 2. 子 =&g ...

  3. vue:父子组件间通信,父组件调用子组件方法进行校验子组件的表单

    参考: ElementUI多个子组件表单的校验管理:https://www.jianshu.com/p/541d8b18cf95 Vue 子组件调用父组件方法总结:https://juejin.im/ ...

  4. 【Vue】利用父子组件间通信实现一个场景

    组件间通信是组件开发的,我们既希望组件的独立性,数据能互不干扰,又不可避免组件间会有联系和交互. 在vue中,父子组件的关系可以总结为props down,events up: 在vue2.0中废弃了 ...

  5. 【vue】父子组件间通信----传函数

    (一)子组件 调用 父组件 方法 方式一) 子组件中通过this.$parent.event来调用父组件的方法 父组件 <template> <div> <child&g ...

  6. vue非父子组件间通信

    有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的Vue实例作为中央事件总线: 有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的 Vue 实例作为中央事件总线: var bu ...

  7. 【vue】父子组件间通信----传值

    官方文档参考 (一)父组件 向 子组件 传值 ①在父组件中调用子组件处,绑定要传的数据data1, 如 <nav  :data1=" "  ></nav> ...

  8. vue2 父子组件间通信

    父组件往子组件传值 props 传text father.vue <template> <div class="father"> {{'我是父组件'}} & ...

  9. Vue 父子组件间的通信

    前言 在 Vue 项目中父子组件的通信是非常常见的,最近做项目的时候发现对这方面的知识还不怎么熟练,在这边做一下笔记,系统学习一下吧. 1 父组件传值给子组件 1.1 传值写法 父组件传值给子组件,这 ...

  10. 【Vue课堂】Vue.js 父子组件之间通信的十种方式

    这篇文章介绍了Vue.js 父子组件之间通信的十种方式,不管是初学者还是已经在用 Vue 的开发者都会有所收获.无可否认,现在无论大厂还是小厂都已经用上了 Vue.js 框架,简单易上手不说,教程详尽 ...

随机推荐

  1. 【Azure Developer】PHP网站使用AAD授权登录的参考示例

    问题描述 如果有个PHP网站,需要使用AAD授权登录,有没有PHP代码实例 可供参考呢? 参考代码 参考一篇博文(Single sign-on with Azure AD in PHP),学习使用SS ...

  2. 浅入 ABP 系列(7):对象映射

    目录 基础 DTO和实体 麻烦的映射 AutoMapper 集成 IObjectMapper/ObjectMapper 对象拓展 写博客的过程中,发现很多基础理论太薄弱,因此很多专业词汇可能会解释错误 ...

  3. Glide源码解析三(注册组件)

    转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12900387.html Glide源码解析一,初始化 Glide源码解析二-into方法 Glide源 ...

  4. [vbs] 定时关闭进程代码

    Dim bag,pipe do Set bag=GetObject("WinMgmts:") Set pipe=bag.execquery("select * from ...

  5. RabbitMQ 快速复习

    目录 RabbitMQ学习笔记 1.消息队列概述 1.1 为什么学习消息队列 1.2 什么是消息中间件 1.3 消息队列应用场景 1.3.1 异步处理 1.3.2 解耦服务 1.3.3 流量削峰 1. ...

  6. 闭关修炼180天 -- 手写SpringMVC框架(迷你版)

    SpringMvc知识须知 MVC设计模式 Model(模型):模型包含业务模型和数据模型,数据模型⽤于封装数据,业务模型⽤于处理业 务. View(视图): 通常指的就是我们的 jsp 或者 htm ...

  7. LosslessCut 视频 切割合并 - 软件推荐 - 非常好用

    LosslessCut 视频切割合并 - 软件推荐 - 非常好用 下载地址 https://n802.com/f/14902046-490311155-557856 参考文章 http://www.r ...

  8. ETL工具-KETTLE教程 实例实战4----转换(值映射、列转行,增加常量、增加序列等)

    附:Kettle实战视频教程,需要的朋友可以看看学习下哈~~ kettle实战第一讲-文件和数据库表的互相转换处理_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili kettle实战第二讲-数据库单 ...

  9. 百度api经历

    底部参考文档,欢迎点击:https://www.runoob.com/http/http-content-type.html 这两天遇到了点糟心事,因为小伙伴走了.然后事情起因是这样的,来了个任务封装 ...

  10. Spring Boot 实现各种参数校验(附项目源码)

    本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理,死磕到底! 项目源码:spring-validation 一.简单使用 Java API规范(JSR303)定义了Be ...