首页 > 其他分享 >Vue3 组件通信方式小结

Vue3 组件通信方式小结

时间:2024-03-17 16:11:07浏览次数:23  
标签:02 vue const 01 Vue3 组件 小结 emit

也是零零散散用 vue3 来搞一些前端的页面, 每次在组件通信, 主要是传数据这块总是忘记, 大多无非父传子, 子传父等情况, 这里再来做一个小结.

父传子 Props

最常见的就是父组件给子组件传递数据, 不论是传字符串也好, 还是数组, 对象, 函数等, 都可以通过 属性传值 的方式, 子组件通过 defineProps 对应接收即可.

App.vue

<script setup>
import Son from './components/Son.vue'

// 1. 定义父组件要通过 arr 属性传递给子组件 Son.vue 的数据
const arr = [1, 2, { name: 'youge', age: 18 }]
</script>

<template>
  <!-- 子组件 -->
  <Son :arr="arr" @refresh="handleRefresh"></Son>
</template>

Child.vue

<script setup>
import { ref } from 'vue'

defineProps({
  arr: Array,
})

</script>

<template>
  <div>
    子组件: 
    <br /> <br />
    父组件传来的数据: <br />
    {{ arr }}
  </div>
</template>
子组件:

父组件传来的数据:
[ 1, 2, { "name": "youge", "age": 18 } ]

总之父传子, 通过属性传递方式, 啥都能传哈, 子组件通过defineProps 都能接收处理.

子传父 Emit

而使用最多的场景是将页面拆分为很多小组件, 子组件, 数据在子组件交互然后渲染或者传递给父组件, 这种情况就用 $emit 来实现.

先又子组件派发, 传递, 然后父组件对应接收.

Child.vue

<script setup>
const data = [
  { name: 'huoya', age: 18 },
  { name: 'cj'   , age: 20 }
]

// 01: 都是要进行先定义出事件名称
const emit = defineEmits(['refresh_01', 'refresh_02'])

// 02: 推荐函数写法可以更灵活控制 emit 的触发时间
const handleClick = () => {
  emit('refresh_02', data)
}

</script>

<template>
  <div class="con">
    <!-- 行内写法 -->
    <button @click="$emit('refresh_01', data)">标签写法: 向父组件传数据</button>
    <!-- 函数写法 -->
    <button @click="handleClick">函数写法: 向父组件传数据</button>
  </div>
</template>

App.vue

<script setup>
import { ref } from 'vue'
import Son from './components/Son.vue'

const sonData_01 = ref(null)
const sonData_02 = ref(null)

// 处理子组件传递过来的数据
const handleRefresh_01 = (e) => {
  sonData_01.value = e
}

const handleRefresh_02 = (e) => {
  sonData_02.value = e
}
</script>

<template>
  <div class="con">
    父组件:
    <br /><br>
    {{ sonData_01 }}
      
    <br /><br>
    {{ sonData_02 }}
  </div>


  <!-- 调用子组件 -->
  <Son @refresh_01="handleRefresh_01" />

  <Son @refresh_02="handleRefresh_02" />


</template>

小结子传父通过 emit 事件实现的 4 步走:

  • 01: 在子组件先定义事件, const emit = defineEmits(['A', 'B'])
  • 02: 在子组件调用事件, 向父组件传递数据 const handleClick = () => { emit('A', data }
  • 03: 在父组件通过 @A="handleA" 来监听子组件传过来的事件 A
  • 04: 在父组件定义一个方法 handleA 来接收子组件通过 事件A 传递过来的数据

子传父 DefineExpos / Ref

还有种常用的方法是, 子组件通过 defineExpose 向外暴露一个方法,

然后父组件通过 ref 调用子组件的方法, 顺带将数据带过来.

标签:02,vue,const,01,Vue3,组件,小结,emit
From: https://www.cnblogs.com/chenjieyouge/p/18078708

相关文章

  • 微信小程序云开发教程——墨刀原型工具入门(表单组件)
      引言作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计?“时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。要在短时间内理解、掌握一个工具的使用,最有效的方式莫过于临摹:看实例视频教程,并跟着教程在实例素材上操作。......
  • 路由组件传递参数
    1.props的值为布尔类型 constUser={props:['id'],    //使用props接收路由参数template:'<div>用户ID:{{id}}</div>'    //使用路由参数} constrouter=newVueRouter({routes:[//如果props被设置为true,route.params将会被......
  • Vue3学习日记 Day1
    一、简介1、简介  Vue3是新的默认版本,拥有更快的速度,更好的语法二、使用create-vue搭建Vue3项目1、创建项目1、介绍  create-vue是Vue官方新的脚手架工具,底层切换为了vite,为开发提供极速响应2、使用  2.1、确定环境条件    2.1.1已安装16.0或......
  • Power Apps 人员选择器组件
    前言最近,用户有个需求,是需要开发一个人员选择器组件,这不,安排。正文大家先看看效果,这是用了FluentUI的组件,使用PCF封装的:我觉得这样的方式,还是很好的,因为本身画布应用的组件有限,这样我们可以更加丰富画布应用的组件库。废话也不多说了,有兴趣的就去......
  • 第一个Vue3程序
     上一个作品是Vue2的代码,这个是Vue3,引入时候不一样<!DOCTYPEhtml><html><head><title>Vue.js示例</title><!--引入Vue.js--><scriptsrc="https://unpkg.com/vue@3/dist/vue.global.js"></script></head>......
  • Vue3-03_组件基础_上
    单页面应用程序什么是单页面应用程序单页面应用程序(英文名:SinglePageApplication)简称SPA,顾名思义,指的是一个Web网站中只有唯一的一个HTML页面,所有的功能与交互都在这唯一的一个页面内完成。单页面应用程序的特点单页面应用程序将所有的功能局限于一个web页面中,仅在......
  • vue3+ts 上传组件
    本来是用的jeecg-vue3中的上传组件,如下图: 功能上还是蛮全的,就是上图中这个链接的代码死活找不到,查了下,是基于antv的a-upload实现的。但是antv中也没找到,上图这个只有移入删除的功能但是我这边的需求是点击链接可以直接在网页预览,而不是下载,移入后有个删除和下载的功能按钮。......
  • 从后端获取的数据,是多层嵌套的,该如何传递给各个tab和子组件,如表单和表格?
    当后端返回的数据是多层嵌套结构时,传递给各个Tab和子组件(如表单和表格)可以按照以下步骤进行:状态管理:使用React的状态管理库如Redux、MobX或React的ContextAPI来集中存储从后端获取的多层嵌套数据。这样可以确保所有子组件都可以访问到这些数据。//使用Redux示例import{c......
  • vite中配置less,vue3中配置less
    前言如果赶时间请直接使用目录跳到解决问题的部分。使用的项目使用vue脚手架生成。npminitvue@latest版本如下"@vitejs/plugin-vue":"^5.0.4","vue":"^3.4.21"由于近期在学less,心想如果不能将其应用到vue项目中,无异于纸上谈兵。于是立即用vue脚手架......
  • WEB三大组件之Filter
    在很多项目中通常需要用到filter来实现用户身份识别,并将识别出来的用户信息,保存到ThreadLocal对应的上下文,这样在后续的请求链路中,在任何地方都可以直接获取当前的登录用户了。来看一下JavaWEB三大组件之一的过滤器Filter,是如何在技术派中发挥作用的使用场景实现类路径:com/......