首页 > 其他分享 >Vue3中实现父子组件通信

Vue3中实现父子组件通信

时间:2024-06-04 16:03:53浏览次数:17  
标签:const 父子 inject key Vue3 组件 message ref

Vue3中实现父子组件通信

父传子

父组件给子组件绑定属性,子组件内部提供props选项接收
setup语法糖下局部组件无需注册可以直接使用

//父组件中
<script setup>
import SonCom from ''
const message=ref('this is father')
</script>

<template>
   <SonCom :messgae="message"/>
</template>

//子组件中
<script setup>
//defineProps 接收父组件传来的属性
const props=defineProps({
   message:String
})
console.log(props.message)
</script>

子传父

父组件中给子组件标签通过@绑定事件,子组件内部通过$emit触发事件

//父组件中
<script setup>
import SonCom from ''
const getMessage=(msg)=>{
   console.log(msg)
}
</script>

<template>
   <!--绑定事件-->
   <SonCom @get-message="getMessage" />
</template>

//子组件中
<script setup>
//definEmits 定义事件,要求传来数组格式的参数
const emit=defineEmits(['get-message'])

//触发自定义事件,传数据给父组件
const sendMessage=()=>{
   emit('get-message','子组件触发自定义事件')
}

</script>

模板引用和对象暴露

  1. 调用ref函数生成ref对象 ,绑定ref对象到标签
    组件挂载完毕之后才能获取
<script setup>
//调用ref函数,生成ref对象
const h1Ref=ref(null)
//组件挂载完毕之后获取
onMounted(()=>{
   console.log(h1Ref.value)
})
</script>

<template>
   <!-- ref绑定到标签 -->
   <h1 ref="h1Ref"> dom标签h1 </h1>
</template>
  1. 默认情况下setup中组件内部的属性和方法不开放给父组件访问,可以通过defineExpose()方法暴露给父组件
<script setup>
//子组件中
defineExpose({
   name,
   setName
})
</script>

provide 和inject

顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

  1. 顶层组件通过provide函数提供数据
//key是自定义的名字
provide('key',顶层组件中的数据或ref对象)
  1. 底层组件通过inject函数获取数据
const message=inject('key')
  1. 底层组件可以调用方法修改顶级组件中的数据
//顶层组件传递方法
provide('method-key',setCount)

//底层组件接收方法
const setCount=inject('method-key')

标签:const,父子,inject,key,Vue3,组件,message,ref
From: https://blog.csdn.net/m0_73761441/article/details/139445480

相关文章

  • 【vue+css】实现叠层轮播图切换组件
    halo,小伙伴们,当我们需要开发一个自定义样式的叠层轮播图切换组件,在AntDesign或elementUI都没有满意的,我们是不是会考虑自己写一个,如下图所示的:笔者这次带来的支持左右切换循环切换、自动切换,话不多说,上代码:新建一个页面文件为carouselImg.vue,编写如下:<template><div......
  • vue3 实现自定义指令封装 --- 通俗易懂
    1、局部自定义指令1.1 在<scriptsetup>定义组件内的指令,任何以v开头的驼峰式命名的变量都可以被用作一个自定义指令<template><div><h3>使用自定义指令</h3><div>##########################start局部自定义指令</div><div>我是一个input:......
  • JavaFX 常见图表组件
    图表组件简介JavaFX提供了一系列的图表组件,允许开发者在应用程序中轻松集成各种图表和图形。名称中文描述BarChart条形图用于显示条形图,条形图通过水平或垂直的条形来表示数据的大小PieChart饼图用于创建饼图,饼图通过不同扇区的角度来展示数据的比例关系Li......
  • Vue实现动态组件
    使用场景:同一个区域因状态不同或者tab页,展示给用户不同模版样式逻辑的组件动态组件实现,是通过使用 is attribute来切换不同的组件<componentv-bind:is="currentTabComponent"></component> 一、公共动态组件父组件(可以通过keep-alive缓存)<!--公共动态组件isComp......
  • Vue3-组件通信详解
    文章目录组件通信的含义Vue3组件通信和Vue2的区别组件通信的具体实现props(父子组件通信)自定义事件(子传父)mitt(任意组件间通信)v-model$attrs(非props的父子组件通信)r......
  • vue2.0和vue3.0同时使用
    背景:原先电脑上安装了vue2.0和node14.17.6版本,后面新项目使用的是vue3.0和node 16.6.1。通过nvm安装node 16.6.1的时候,不小心把原来的2.0环境给搞坏了。目的:本文将通过文字描述(都是cmd命令,截图感觉没啥意义)的方式,讲述卸载和安装多版本node的vue环境前言:步骤中所有的命令都......
  • JavaFX 常见布局组件的使用
    Laytout简介JavaFX提供了多种布局管理器(LayoutManagers),它们用于自动管理用户界面组件的位置和大小。布局管理器可以简化UI设计,因为它们会根据窗口的大小变化自动调整其中的组件。布局组件JavaFX包含以下布局组件:布局名称中文说明AnchorPane锚点布局允许开发......
  • pinia之Vue 的存储库,案例:允许跨组件/页面共享状态--传值
    pinia之Vue的存储库,案例:允许跨组件/页面共享状态--传值第⼀步:npminstallpinia第⼆步:操作src/main.tsimport{createApp}from'vue'importAppfrom'./App.vue'/*引⼊createPinia,⽤于创建pinia*/import{createPinia}from'pinia'/*创建pinia*/con......
  • 界面控件DevExpress WinForms的流程图组件 - 可完美复制Visio功能(二)
    DevExpressWinForms的Diagram(流程图)组件允许您复制MicrosoftVisio中的许多功能,并能在下一个WindowsForms项目中引入信息丰富的图表、流程图和组织图。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美......
  • BootStrap入门到实战:BootStrap组件(一)- Glyphicons字体图标、下拉菜单、按钮组、按钮式
    目录 一、Glyphicons字体图标二、下拉菜单1.基本实例1.1示例1.2用jQuery实现1.3菜单向上弹出2.对齐3.标题4.分割线5.禁用的菜单项三、按钮组1.基本实例2.按钮工具栏3.尺寸4.嵌套5.垂直排列6.两端对齐排列的按钮组四、按钮式下拉菜单1.单按......