vue3探索——使用ref与$parent实现父子组件间通信

这篇具有很好参考价值的文章主要介绍了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 的两个作用:文章来源地址https://www.toymoban.com/news/detail-695045.html

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

父组件向子组件传递数据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实现父子组件间通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VUE3+TS(父子、兄弟组件通信)

    目录 父传子值、方法(子调用父值、方法) 子传父值(父调用子值) 父读子(子传父)(父调用子值、方法) 兄弟(任意组件)通信 引入Mitt来完成任意组件通信 1、统一规范写法,通过在子组件标签上绑定属性和值,来传递到子组件,子组件再通过defineProps来接收,先给其

    2023年04月08日
    浏览(34)
  • Vue3父子组件间传参通信

    本文主要是记录Vue3在setup语法糖下的父子组件间传参的四种方式 Vue3+TypeScript 父组件传值给子组件主要是由父组件为子组件通过v-bind绑定数值,而后传给子组件;子组件则通过defineProps接收使用。 如下为父组件 Father.vue 如下为子组件Son.vue 父组件 Father.vue 中在调用 Son.vue 这个子

    2024年01月19日
    浏览(58)
  • vue3 组合式api中 ref 和$parent 的使用

    ref 的使用 vue3中, 在 组件中添加一个 component ref=“xxx” ,就可以在父组件中得到 子组件的 dom 对象, 以及 虚拟的 dom 对象, 有了虚拟 dom, 我们就可以在父组件中控制子组件的显示了 ref 的使用方法 vue3中ref 的特点 以上如果在vue2中,就可以使用 子组件的对象来改变子组件的

    2024年02月10日
    浏览(31)
  • vue3 常用的组件互相通信(父子、兄弟、爷孙、任意组件)

    目录 前言:目前组件通信方法有好多种,我这挑选一部分来讲 1、父传子 2、子传父 3、兄弟之间通信 3.1、父组件充当中间件 3.2、全局事件总线—EventBus 4、爷孙之间通信 5、任意组件、全局 方案 父传子 子传父 props / emits props emits v-model / emits v-model emits ref / emits ref emits provi

    2024年02月15日
    浏览(28)
  • vue3 使用 mitt 插件实现非父子组件传值

    介绍 : mitt 是一个 JavaScript 库,用于实现事件的订阅和发布 1、安装 2、新建 utils/eventBus.ts 文件 3、使用

    2024年02月09日
    浏览(37)
  • vue3探索——组件通信之依赖注入

    通常情况下,当我们需要从父组件向子组件传递数据时,会使用  props 。想象一下这样的结构:有一些多层级嵌套的组件,形成了一颗巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分数据。在这种情况下,如果仅使用 props 则必须将其沿着组件链逐级传递

    2024年02月10日
    浏览(30)
  • vue3探索——组件通信之事件总线

    Vue2.x使用EventBus进行组件通信,而Vue3.x推荐使用 mitt.js 。 比起Vue实例上的 EventBus , mitt.js 好在哪里呢?首先它足够小,仅有200bytes,其次支持全部事件的监听和批量移除,它还不依赖Vue实例,所以可以跨框架使用,React或者Vue,甚至jQuery项目都能使用同一套库。 使用yarn安装

    2024年02月12日
    浏览(31)
  • vue学习-03vue父子组件与ref属性

    本篇开始,我们将复习一下上篇的组件引入: App.vue components/ School.vue Student.vue main.js main.js App.vue,将最上边的App.vue调整为以下内容 school.vue student.vue

    2024年02月07日
    浏览(28)
  • vue3父组件使用ref调用子组件方法

    在vue2中,父组件通过ref调用子组件的方法只需要给子组件添加ref属性,然后使用this.$refs.XXX.method即可 但是在vue3中,子组件需先使用defineExpose将方法暴露给父组件 调用方法如下: 1、使用getCurrentInstance 2、使用ref函数创建一个响应式的引用,并将其绑定到子组件上

    2024年01月16日
    浏览(32)
  • vue04---计算属性/监听(侦听)属性/Vue生命周期/组件介绍和使用/组件间通信/ref属性

    # 1 计算属性是基于它们的依赖变量进行缓存的 # 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) # 3 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 4 计算属性,必须有返回值 基本使用 重写过滤案

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包