父子组件之间的通信是vue中的基础知识,在此做一个简单的梳理。
总的来说父传子是通过props,子传父是通过$emit。
简单的一个demo来说说,先上代码
父组件:

如图,HelloWorld是一个子组件,将它引入父组件并注册然后渲染这个自定义组件标签,第一点先看父向子传参,我们在父组件的data里定义了一个变量sw,并且在子组件标签上通过动态绑定的方式绑定了一个动态的qq变量来将sw变量传下去(凡是组件注入属性都得动态绑定,不然就会被当成字符串)
子组件:


子组件使用props接收参数,必须注意的是,props里的接收变量必须和动态绑定的那个变量一致,不然就接收不到,比如这儿都是用的qq这个变量,console如下

但是将接收变量改为mm时,console如下


到此,父组件向子组件传参就完成了。
接下来是子向父传参,前面说过是通过emit完成的,做法是在子组件内部当你需要向父组件传参时就自定义一个事件,如上图定义了一个ok的事件,这个事件不用做任何操作,需要做的是在父组件内去用v-on/@来监听这个事件,当监听到这个事件被传出时,那么print方法会自动执行,并且是自动获取到子组件传出来的参数作为print的入参(不需要写括号加形参的方式),如果加了反而会报错

而正常时会是

然而会有报错

这是因为我们修改了由父组件传下来的参数,默认是不能直接修改props传进的参数的
还有就是props的写法,可以是像上图一样直接写数组,然后将接收变量定义成字符串,那么无论父组件传下来的是单个变量还是一个对象,其实都能被存进这个字符串的接收变量,当然还可以定义成对象的形式,同理,对象的属性名也必须和父组件传下来的保持一致

对象属性名改为了oo,就没有接收到数据
同样这儿的default可以去掉,他只是表示一种默认值


关于props还有一点是,它其实和data一样,都是定义数据的地方,只不过是props外部,data内部,
所以props里的变量名不能和data里的重复,会报错
关于emit也有几点:


它的原理是通过emit这个方法向父组件暴露自定义的事件ok,父组件监听这个自定义事件ok,当有参数self.qq被传出时,那么print方法将self.qq作为实际参数。
emit只能有两个参数,第一个是自定义事件,第二个是要传递的参数,若参数很多,那么只能将其包装成一个对象,然后在第二个参数传递出去。
至于为什么会加美元符号,是因为所有vue实例本身自带的属性在调用时都要加,比如根元素el,状态data,props在调用时都得加美元符号。

最后只得一提的是,这种父子组件的通信方式是典型的观察者模式。

Vue中关于父子组件之间的通信相关推荐

  1. VUE 2.0 父子组件之间的通信

    父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent><child :child-com="content"></child ...

  2. Vue中父子及非父子组件之间的通信方法

    Vue中父子及非父子组件之间的通信方法 父子组件之间的通信方法 父级->子级通信 (依赖单向数据绑定+props实现) Vue.component('Father', { //注册了含有data ...

  3. vue/父子组件之间的通信

    父子组件之间的通信 父组件绑定数据在组件上子组件props属性接收 父组件内的data属性中待传的数据data1 => <cpn :data2="data1">& ...

  4. Vue非父子组件之间的通信

    文章目录 非父子组件的通信 1.Provide和Inject 1.1基本使用 1.2处理响应式数据(了解) 2.全局事件总线 非父子组件的通信 此篇讲解的是, 在学习状态管理之前, 非父子间通信的方案 ...

  5. VUE中的父子组件通信

    VUE项目中的父子组件之间的传值. 首先说一下父子组件就是在一个vue文件中引入另一个vue文件,被引入vue文件就是子组件,引入vue文件的vue文件就是父组件.而在父组件中是不能直接调用子组件中的 ...

  6. vue的父子组件之间的通信详解

    vue的父子组件之间的通信详解 一.父组件给子组件传值 父组件引入子组件,并对子组件进行监听 <!-- 父组件 --><template><div><h1&g ...

  7. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于"父子组件通信"的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰 ...

  8. vue中,兄弟组件之间传值

    vue中,兄弟组件之间传值 项目中,需要使用多个子组件,当需要传递值的时候,较为麻烦,怎样实现呢 1.一般可以使用子组件a传递给父组件,再由父组件传递给子组件b.但是一般较为麻烦, 2.使用bus作为 ...

  9. React(一)父子组件之间的通信

    无论是React,还是Vue,父子组件之间的通信都是组件式开发至关重要的一部分.备注一下基础要点. 1.父组件向子组件传值 父组件向子组件传值是在调用子组件的时候通过参数传递给子组件 .父组件代码 i ...

最新文章

  1. 【跃迁之路】【530天】刻意练习系列289(2018.07.20)
  2. c 串转string_c++ 中 char 与 string 之间的相互转换问题
  3. P4700-[CEOI2011]Traffic【tarjan,dp】
  4. Android开机广播和关机广播
  5. Python判断不可变对象(字符串,整数,浮点数,数组)相等的办法以及其底层实现原理
  6. 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题.....
  7. 再看产业地图及《中国2010-2011产业地图》书评
  8. 关于C语言中一些常用函数的说明
  9. mysql5.6.25及以上下载衔接
  10. Ice简介+Qt代码示例
  11. NS3中路由协议分析【AODV理论分析】
  12. 六、Kali Linux 2 远程控制
  13. python进程间通信时间开销_python 进程间的通信
  14. 微信小程序 购物车简单实例
  15. C++为什么空格无法输出_47个快捷键、50个CAD技巧,终于知道为什么别人用CAD总比我快了!...
  16. [Android Studio] 手机安装apk报错解决方法
  17. 2018 年第二十三届全国青少年信息学奥林匹克联赛初赛
  18. 一个IT中专生在深圳的9年辛酸经历
  19. WordCount单词统计笔记
  20. Unit mysqld.service entered failed state

热门文章

  1. Facebook推出防止网络欺凌的“检举”功能
  2. 举例说明层次分析的三大原则_20202021企业软件开发流程(3)软件开发过程和软件开发原则...
  3. 2020年训练狗视频全套课程
  4. thinkphp整合系列之微信扫码支付
  5. 一探究竟之PullZoomView
  6. 新版Cloudreve安装并绑定OneDrive
  7. Closest Cow Wins S 最近的奶牛获胜
  8. CSS绝对定位和相对定位的百分比计算以及宽高计算
  9. 【vim】批量注释与取消注释
  10. 高性能游戏蓝牙耳机有哪些?手游游戏蓝牙耳机推荐