写vue,如果页面涉及到多个组件,就会涉及组件之间的通信,可能是父子组件间的通信,也可以是同级组件间的通信,那么,vue里面的组件如何通信。一般来说在vue的数据传递是在父组件传子组件通过属性来传,子组件传父组件通过事件来传值。

  1. 子组件通过通过this.$emit()的方式将值传递给父组件
  2. 通过vuex来传递组件间的数据
  3. 通过中央总线来传递组件间的数据
  4. 通过修改父组件传过来的对象属性
  5. 父组件使用子组件的引用ref调用子组件的方法获取子组件的数据
一、子组件通过this.$emit()的方式将值传递给父组件,父组件里面的子组件通过@func绑定一个函数来处理

子组件传过来的数据

<template><div class="app"><input @click="sendMsg" type="button" value="给父组件传递值"></div>
</template>
<script>
export default {data () {return {//将msg传递给父组件msg: "我是子组件的msg",}},methods:{sendMsg(){//func: 是父组件指定的传数据绑定的函数,this.msg:子组件给父组件传递的数据this.$emit('func',this.msg)}}
}
</script>

父组件


<template><div class="app"><child @func="getMsgFormSon"></child></div>
</template>
<script>
import child from './child.vue'
export default {data () {return {msgFormSon: "this is msg"}},components:{child,},methods:{getMsgFormSon(data){this.msgFormSon = dataconsole.log(this.msgFormSon)}}
}
</script>
二、通过vuex来传递组件间的数据

vuex就是把数据放到内存里面去,各个组件间都可以共享vuex里面的数据
1.在一个组件间调用this.$store.dispatch(‘findUserInfoList’, q_userInfo_form); 来触发vuex里面函数修改vuex的数据,然后在另一个组件用计算属性映射获取vuex的这个属性值,就可以实现组件间的数据传递

computed: mapState({//映射vuex的相关属性值userInfoList: state => state.userInfoModule.userInfoList,start: state => state.userInfoModule.start,total: state => state.userInfoModule.total,
}),
method:{//查询操作findUserInfoList: function(q_userInfoForm, start){this.q_userInfoForm.start = (start === null) ? 1 : start;this.$store.dispatch('findUserInfoList', q_userInfo_form);},
}
三、通过中央总线来传递组件间的数据

对于一些简单的项目里的可能又不是父子组件,可能是同级组件的,另一方面又没有必要使用Vuex,针对这种情形可以使用中央事件总线(Event Bus)来解决问题,主要用到vue对象的$on和$emit事件,在同一个vue的实例可以触发这两个事件,比如子组件传递数据到父组件,在子组件通过同一个vue对象触发$emit事件传递数据,在父组件通过vue实例的$on监听刚刚emit触发的事件来获取子组件传递过来的数据

  1. 先创建一个constantsBus.js文件,里面根据不同模块创建相关的vue实例
/***  不同组件间通讯用的 中央事件总线*/import Vue from 'vue';//用户管理总线
export const userBus = new Vue();//管理员管理总线
export const adminBus = new Vue();
  1. 在一个组件间调用$emit传递数据
//引用刚刚创建的constantsBus.js
import * as constantsBus from '@/common/constantsBus';

  1. 在另个接收数据的组件用$on来监听获取emit传过来的数据
created() {let that = this;//监听子组件的事件,获取其他组件传递过来的data数据constantsBus.processBus.$on('processChooseAssessor', data => {//获取emit触发的processChooseAssessor事件传递过来的data数据});
},
四、通过修改父组件传过来的对象属性

一般来说在vue的数据传递是在父组件传子组件通过属性来传,但是通过属性来传值,是单向的,子组件不能修改父组件的prop值,如果在子组件里面修改父组件传过来的prop属性值,会报错,但是也有例外,对象类型的除外,如果父组件传给子组件的属性是对象的话,是可以修改对象里面的值的,并且修改后也对父组件可见,因为对象的话最后的引用都是指向同一块内存,不受子组件不可以修改父组件的属性约束。(不过不建议这样处理,子组件可以修改父组件的属性会污染数据传递,可能以后在那个子组件改了都不知道,一般对象的传递要深拷贝)

五、父组件使用子组件的引用ref调用子组件的方法获取子组件的数据

1.在子组件写一个获取数据的方法

2.父组件通过子组件的ref调用这个方法获取子组件的数据

<trademark-file-upload ref="trademarkFileUpload" :uploadFileList="uploadFileList"></trademark-file-upload><script>
let fileList = this.$refs.trademarkFileUpload.getFileList();
<script>

参考
子组件通过this.$emit()的方式将值传递给父组件

vue 组件间的通信,子组件向父组件传值的方式总结相关推荐

  1. Vue全家桶之组件间的通信(四)

    Vue全家桶之组件间的通信(四) 概述 组件是Vue中最强大的功能,组件实例之间的数据无法直接相互引用,所以需要掌握组件间通信的方式和技巧. 组件实例之间的关系可以分为父子关系.兄弟关系和隔代关系.针 ...

  2. Vue组件间的通信【子传父,父传子,同级传递,爷孙传递】

    Vue组件间的通信 引出问题 vue一个重要的思想就是组件化开发,说到组件化开发,提高结构样式行为的复用性,组件写好了,但组件间之间数据如何传递,就成了一个问题- vue 组件之间是可以相互嵌套的,就 ...

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

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

  4. Vue 父子组件间的通信

    前言 在 Vue 项目中父子组件的通信是非常常见的,最近做项目的时候发现对这方面的知识还不怎么熟练,在这边做一下笔记,系统学习一下吧. 1 父组件传值给子组件 1.1 传值写法 父组件传值给子组件,这 ...

  5. uniapp 子组件 props拿不到数据_Vue组件间的通信

    人之间的感情是复杂的以及需要维护的,那么就免不得各种打电话 你有多久没有打电话了呢? 你又有多久没有收到电话了呢? 你还记得你的手机来电铃声吗???? 爸爸给儿子打电话 ☎️ 父组件通过使用v-bin ...

  6. 小程序-实现自定义组件以及自定义组件间的通信

    前言 对于组件的封装,在小程序当中对于多个页面的复用有着重要的作用,小程序中注册的每个页面都是独立的 页面的显示view层与逻辑层是通过data进行绑定关联,若需要更改页面中的数据,则通过setDat ...

  7. vue ui无效_vue开发中,父组件添加scoped之后。解决在父组件中无法修改子组件样式问题。...

    在vue的开发中,我们需要引用子组件,包括ui组件(element.iview).但是在父组件中添加scoped之后,在父组件中书写子组件的样式是无效果的.去掉scoped之后,样式可以覆盖.但这样会 ...

  8. 042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  9. [react] react组件间的通信有哪些?

    [react] react组件间的通信有哪些? Props Context ref:通过Ref获取组建的实例,在通过实例拿到组件的属性值或者方法的回调 第三方的,Redux是基于Conext基础上的库 ...

最新文章

  1. 机器学习:信用风险评估评分卡建模方法及原理
  2. 地平线新征程!官网焕然一新,二代自动驾驶芯片势已蓄,只待发
  3. 在vc2005中使用MoveWindow()调整控件大小,不能及时刷新,在vc6中则可以
  4. 一步一步教你抓数据——用.net精确提取网站数据的通用方法 [转]
  5. html5画布 文本无法显示,淡出HTML5画布中的文本效果
  6. jQuery-DOM操作
  7. 20190616 IDEA-每次修改JS文件都需要重启Idea才能生效解决方法
  8. 斐讯K2破解任意校园网教程
  9. 知识问答题小程序头脑王者源码
  10. 理论知识:电感感应电压公式,纯电感正弦电路感应电压公式,纯电容正弦电路电流公式的推导
  11. 计算机图形学:二维基本几何变换——对称
  12. 常见的图片格式及适用情况
  13. (9)Android之路====Android系统OTA更新
  14. ffmpeg命令行太多了_ffmpeg每帧请求的位数过多
  15. IAR使用ST-Link下载仿真
  16. 基于深度学习的三维人体姿态估计
  17. sqlmap 注入教程 常用命令大全
  18. CString、CTime和COleDateTime转换
  19. Pareto最优解排序
  20. 三种编码器技术详解:各有利弊,如何选择?

热门文章

  1. 2014年04月10日
  2. Java编程基础阶段笔记 day06 二维数组
  3. NEUQACM第二次双周赛
  4. 好用的python_好用的 python 工具集合
  5. 盘点:恋爱一族约会英语词汇
  6. 使用html css实现180箭头旋转,jQuery和css3控制箭头丝滑旋转
  7. udp网络程序-端口问题
  8. 一文详解数据归约的四种途径
  9. cnn输入层_完全使用忆阻器实现CNN,清华大学微电子所新研究登上Nature
  10. ubuntu系统下配置IPMI