vue3探索——使用ref与$parent实现父子组件间通信
在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实现父子组件间通信的更多相关文章
- vue之父子组件间通信实例讲解(props、$ref、$emit)
组件间如何通信,也就成为了vue中重点知识了.这篇文章将会通过props.$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信. 组件是 vue.js 最强大的功能之一,而组件实例 ...
- Vue的父子组件间通信及借助$emit和$on解除父子级通信的耦合度高的问题
1.父子级间通信,父类找子类非常容易,直接在子组件上加一个ref,父组件直接通过this.$refs操作子组件的数据和方法 父 这边子组件中 就完成了父 => 子组件通信 2. 子 =&g ...
- vue:父子组件间通信,父组件调用子组件方法进行校验子组件的表单
参考: ElementUI多个子组件表单的校验管理:https://www.jianshu.com/p/541d8b18cf95 Vue 子组件调用父组件方法总结:https://juejin.im/ ...
- 【Vue】利用父子组件间通信实现一个场景
组件间通信是组件开发的,我们既希望组件的独立性,数据能互不干扰,又不可避免组件间会有联系和交互. 在vue中,父子组件的关系可以总结为props down,events up: 在vue2.0中废弃了 ...
- 【vue】父子组件间通信----传函数
(一)子组件 调用 父组件 方法 方式一) 子组件中通过this.$parent.event来调用父组件的方法 父组件 <template> <div> <child&g ...
- vue非父子组件间通信
有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的Vue实例作为中央事件总线: 有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的 Vue 实例作为中央事件总线: var bu ...
- 【vue】父子组件间通信----传值
官方文档参考 (一)父组件 向 子组件 传值 ①在父组件中调用子组件处,绑定要传的数据data1, 如 <nav :data1=" " ></nav> ...
- vue2 父子组件间通信
父组件往子组件传值 props 传text father.vue <template> <div class="father"> {{'我是父组件'}} & ...
- Vue 父子组件间的通信
前言 在 Vue 项目中父子组件的通信是非常常见的,最近做项目的时候发现对这方面的知识还不怎么熟练,在这边做一下笔记,系统学习一下吧. 1 父组件传值给子组件 1.1 传值写法 父组件传值给子组件,这 ...
- 【Vue课堂】Vue.js 父子组件之间通信的十种方式
这篇文章介绍了Vue.js 父子组件之间通信的十种方式,不管是初学者还是已经在用 Vue 的开发者都会有所收获.无可否认,现在无论大厂还是小厂都已经用上了 Vue.js 框架,简单易上手不说,教程详尽 ...
随机推荐
- WebView无法加载页面报错 net:ERR_CLEARTEXT_NOT_PERMITTED 还有webView加载网页后出现ERR_UNKNOWN_URL_SCHEME
根据网络安全配置- 从Android 9(API级别28)开始,默认情况下禁用明文支持.因此http的url均无法在webview中加载 还可以看看-https: //koz.io/android-m ...
- 面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会
写在开头 面试官:小伙子请聊一聊Java中的精灵线程? 我:什么?精灵线程?啥时候精灵线程? 面试官:精灵线程没听过?那守护线程呢? 我:守护线程知道,就是为普通线程服务的线程嘛. 面试官:没了?守护 ...
- dnsmasq 本地局域网DNS服务器搭建
项目背景 因为本地环境需要使用域名进行调试,需要DNS服务器 DNS 机器IP:192.168.5.249 dnsmasq 服务端部署 #01 关闭防火墙 systemctl stop firew ...
- [.Net]使用Soa库+Abp搭建微服务项目框架(五):服务发现和健康监测
上篇文章说过,服务发现和健康监测是面向服务体系架构重要的模块,Soa库可以配置使用Consul作为服务发现服务,或者轮询已配置的服务列表作为本机服务发现. 将用Hangfire来作为服务发现与健康监 ...
- Zabbix Agent item监控项讲解
前言 agent与snmp是Zabbix两种重要的监控方式,这一期主要介绍Zabbix Agent item监控项..Zabbix agent分为主动代理.被动代理,配置item类型时,可以选择需要的 ...
- dangle = dance + toggle - dan 向上跳 gle 摆动
dangle = dance + toggle - dan 向上跳 gle 摆动 dangle 英 [ˈdæŋɡl] 美 [ˈdæŋɡl] v.悬垂;悬挂;悬荡;悬摆;提着(某物,任其自然下垂或摆动) ...
- Spring 中不得不了解的姿势
说明 本文非原创,我只是进行了整理以及做了一些改动,仅供学习,若需进行商业使用,请联系原作者 原作者:苏三 原文链接:苏三说技术:Spring系列 Spring IOC 本章节解读的流程为Spring ...
- 公开的Webservice集锦
备注:以下所有的来自 互联网,版权归原作者所有 股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webx ...
- (模板)Manacher算法:线性时间求字符串内回文子串的数量
已通过leetcode647:https://leetcode-cn.com/problems/palindromic-substrings/ void get_d(vector<int> ...
- 【Atcoder F - Cumulative Cumulative Cumulative Sum】线段树
要特别注意下精度,long,int范围.WA了几次 import java.util.Scanner; class Main { // static long[] A2 ;//i^2*AI // st ...