数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
权限系统-商城
个人博客地址

一、概述

在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况。

Vue 开发中常见的三种数据传递情况:父传子、子传父、非父子组件间值的传递

二、父组件向子组件传值

父组件先通过 v-bind 绑定一个数据,然后子组件通过 defineProps宏 接收传递过来的值。如下代码:

父组件 App.vue 中传递 type 和 loading 两个属性值给子组件 Ogbutton

<script setup>import OgButton from "@c/ogbutton/Ogbutton.vue"import { reactive } from "vue"let state = reactive({loading: false})
</script><template><og-button type="warning" :loading="state.loading">Warning</og-button><og-button :type="'success'">Success</og-button>
</template>

子组件 OgButton.vue 中通过 **defineProps宏 (宏无需引入,直接使用即可)**接收传递过来的值

<script setup>
import { computed, toRefs } from "vue"
const props = defineProps({type: {type: String,default: "default"},loading: {type: Boolean,default: false}
})
const { type,loading } = toRefs(props);
const btnType = computed(() => {return type.value ? `btn-${type.value}` : ""
})
</script>
<template><button class="btn" :class="btnType"><i class="iconfont icon-loading" v-if="loading" style="margin-right:6px"></i></button>
</template>

注:vue 设计是单向数据流,数据的流动方向只能是自上往下。为了防止从子组件意外变更父组件的状态,导致应用的数据流向难以理解,规定子组件中不能修改父组件中的数据。

三、瀑布流案例

四、子组件向父组件传值

子组件通过 defineEmits宏 派发一个事件,并返回一个函数

template 模板中直接使用 $emit() 触发这个事件,script 模块中通过defineEmits宏返回的函数触发这个事件

两个触发事件的函数参数:

  • 第一个参数为自定义的事件名称
  • 第二个参数为需要传递的数据
<script setup>const emits = defineEmits(['formSubmit', 'formBack'])const submitForm = (formEle) => {console.log(formEle)if (!formEle) returnemits('formSubmit', formEle)}const resetForm = (formEle) => {if (!formEle) returnformEle.resetFields()}const backFn = () => {// history.back()emits('formBack','返回操作传递的数据....')}
</script>
<template><div><el-form ref="formRef" scroll-to-error><el-form-item>...省略表单控件渲染代码</el-form-item><el-form-item class="btns"><el-button type="primary" @click="submitForm(formRef)">提交</el-button><el-button type="warning" @click="resetForm(formRef)">重置</el-button><el-button type="danger" @click="backFn">返回</el-button></el-form-item></el-form></div>
</template>

父组件监听子组件中定义的事件,并接收传递过来的数据

<script setup>import OgForm from "@c/ogform/Ogform.vue"const submit = (formEle) => {formEle.validate((valid, fields) => {....省略代码})}const back = (arg) => {....省略代码}
</script>
<template><div><og-form  @form-submit="submit" @form-back="back"></og-form></div>
</template>

五、子组件暴露内部属性给父组件

用了 <script setup> 的组件是默认私有的:一个父组件无法访问到一个使用了 <script setup> 的子组件中的任何东西,除非子组件在其中通过 defineExpose 编译器宏显式暴露。

Child.vue 子组件通过 defineExpose 暴露私有属性:

<script setup>import { ref } from 'vue'const a = 1const b = ref(2)defineExpose({a,b})
</script>

父组件 ref 模板引用:

<script setup>import { ref, onMounted } from 'vue'import Child from './Child.vue'const child = ref(null)onMounted(() => {console.log(child.value)})
</script><template><Child ref="child" />
</template>

【Vue3 第十四章】父子组件通信相关推荐

  1. 【Vue3】第十四部分 父子组件传参

    [Vue3]第十四部分 父子组件传参 文章目录 [Vue3]第十四部分 父子组件传参 14. 父子组件传参 14.1 父传子(props) 14.2 子传父(emit) 14.3 子传父(ref) 总 ...

  2. java线程间通信 实例_JAVA-初步认识-第十四章-线程间通信-示例

    一. 引言 之前讲述了线程的基本使用,卖票和存钱.卖票相当于把资源都释放出来,被别人获取到.而存钱,则是把数据都存进去. 现在,我们将线程进行了改变.以前是多个线程在执行同一个动作,无论是继承还是实现 ...

  3. 四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽

    一.父子组件的通信 在上一篇博文中,我们提到了子组件是不能引用父组件或者Vue实例的数据的. 但是,在开发中,往往一些数据确实需要从上层传递到下层: 比如在一个页面中,我们从服务器请求到了很多的数据. ...

  4. 【正点原子FPGA连载】第十四章 串口通信实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  5. 第十四章:Element-ui组件库

    第十四章:Element-ui组件库 一.常用的UI组件库 1.1 移动端常用UI组件库 Vant组件库 Mint组件库 Cube组件库 1.2 PC端常用UI组件库 Element UI组件库 饿了 ...

  6. vue3父子组件通信

    应用场景 子组件中的值发生改变时,向父组件传递一个标识符代表子组件的值已被改变,通过这个标识符对业务进行不同的处理. 基本思路 在子组件被监听的组件上绑定@change事件,@change调用传参方法 ...

  7. vue3 父子组件通信

    前提:封装组件是前端开发必备的,所以父子组件的通信相当重要,接下来总结下vue3父子组件通信的知识点,使用<script setup>语法糖 一.defineProps 和 defineE ...

  8. 系统架构师学习笔记_第十四章_连载

    第十四章  基于ODP的架构师实践 14.1  基于ODP的架构开发过程 系统架构 反映了功能在系统系统构件中的 分布.基础设施相关技术.架构设计模式 等,它包含了架构的 原则 和 方法.构件关系 与 ...

  9. 《Reids 设计与实现》第十四章 集群(上)

    <Reids 设计与实现>第十四章 集群(上) 文章目录 <Reids 设计与实现>第十四章 集群(上) 一.简介 二.节点 1.启动节点 2.集群数据结构 3.CLUSTER ...

最新文章

  1. 华为正式宣布养猪,网友沸腾:支持华为自救!
  2. 安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?
  3. centos启动流程
  4. stringiostream的用法
  5. redis是什么_什么是Redis?为什么我们要用Redis?
  6. WaitForSingleObject 和 EnterCriticalSection 效率比较
  7. [ffmpeg 扩展第三方库编译系列] 关于libopenjpeg mingw32编译问题
  8. oralce 11g rac ocr和votedisk迁移
  9. Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面...
  10. 在React中加载数据:redux-thunk,redux-saga,suspense,hooks
  11. 修复ubuntu中其他盘不能挂载
  12. android 7.1 灭屏,oppocolorosv7.1怎么设置息屏时钟
  13. 计算机与酒店管理大学论文,酒店管理系统的设计与实现
  14. 文本特征提取之TF-IDF算法(原理+Python代码)
  15. indesign在python中是什么意思_用Python做深度学习一:数学基础帖子详情 - 网易云课堂...
  16. 【windows】win10如何安装使用bitlocker
  17. 关于房价问题的看法。
  18. 计算机c语言运算符号取整,c语言取整(c语言四舍五入取整)
  19. 模拟一个“系统登陆“窗体,进行用户名和密码的验证: 1.当用户名和密码都正确时,弹出一个对话框,提示“用户名和密码正确”, 2.用户名错误,弹出一个对话框,提示“用户名错误,请重新输入!”
  20. [技术博客] 小程序前端开发流程——用实例介绍

热门文章

  1. 企业内部应用(阿里商旅)集成 钉钉 与 微信 实现SSO单点登陆
  2. a = a + 1,a+=1, a++, ++a 区别在哪
  3. 电脑上怎么绘制流程图?三分钟快速绘制流程图的秘诀
  4. 如何下载喜马拉雅里面的音频文件
  5. Win8快捷键收集大汇总
  6. iReport导出Excel文件一个字段要占用多列问题的解决
  7. 快速上手!2021年字节跳动、阿里等大厂最全Android面试题,Android校招面试指南
  8. uniapp选择所有城市通过索引方式(源码自带所有城市json格式数据)
  9. 【VINS-MONO测试】安卓手机采集mono+imu数据
  10. 公务员面试题:领导干部直播带货,你怎么看?