一,父组件向子组件传值

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><link rel="stylesheet" type="text/css" href="css/base.css"/><style type="text/css">#app{width: 20%;margin: 200px auto;border: 1px solid #ccc;line-height: 30px;padding: 20px;}</style></head><body><div id="app"><div>{{fathermsg}}</div><menu-item title="fathermsg"></menu-item><!-- 未绑定属性,传的直接就是数据了,而不是父组件的内容 --><menu-item :title="fathermsg"></menu-item><menu-item :title="p"></menu-item><!-- 在父组件中,数据照常写,使用子组件的标签时,需要父组件的哪个数据,就利用属性绑定哪个 --><!-- 在子组件中,需要有props,值是对象,来接收传递进来的数据 --><!-- 属性可以传递多个 --></div><script type="text/javascript" src="js/vue.min.js"></script><script type="text/javascript">//父组件向子组件传值Vue.component('menu-item',{props:['title'],// 这里设置接收的属性值data:function(){return {msg: '子组件本身的数据'}},template: '<div>{{msg+"---"+title}}</div>'})var vm= new Vue({el:'#app',data:{fathermsg: '父组件中的内容',p:"父组件中动态绑定的属性"},components:{}})</script></body>
</html>

二,props属性名规则

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><link rel="stylesheet" type="text/css" href="css/base.css"/><style type="text/css">#app{width: 20%;margin: 200px auto;border: 1px solid #ccc;line-height: 30px;padding: 20px;}</style></head><body><div id="app"><div>{{fathermsg}}</div><menu-item :my-title="fathermsg"></menu-item></div><script type="text/javascript" src="js/vue.min.js"></script><script type="text/javascript">//父组件向子组件传值Vue.component('menu-item',{props:['myTitle'],// 这里设置接收的属性值data:function(){return {msg: '子组件本身的数据'}},template: '<div>{{msg+"---"+myTitle}}</div>'})var vm= new Vue({el:'#app',data:{fathermsg: '父组件中的内容',p:"父组件中动态绑定的属性"},components:{}})</script></body>
</html>

也就是说,在定义组件时使用驼峰式,使用组件标签时,用横杠。

三,props属性值类型

<script type="text/javascript">//父组件向子组件传值Vue.component('menu-item',{props:['num1','str2','bool3','arr4','object5'],// 这里设置接收的属性值data:function(){return {msg: '子组件本身的数据'}},template: `<div><div>{{num1}}</div><div>{{str2}}</div><div>{{bool3}}</div><ul><li :key="index" v-for="(item,index) in arr4">{{item}}</li></ul><div><span>{{object5.name}}</span><span>{{object5.age}}</span></div></div>`})var vm= new Vue({el:'#app',data:{arr:["first","second"],str:"我是字符串",obj:{name:"张三",age:12}},components:{}})</script>

使用组件时:

<div id="app"><menu-item :num1="12" :str2="str" :bool3="true" :arr4="arr" :object5="obj"></menu-item></div>

结果;

四,子组件向父组件传递信息


如果子组件可以直接更改父组件中的值,那样程序会变得很乱,为了避免这种情况的发生,尽量不要在子组件中直接修改父组件的数据,也就是说:props的传递数据原则:单向数据流!

#app内部都是父组件的内容,子组件是这个menu-item标签定义的内容。
里面的那个button绑定了一个事件,在这里接收这个事件enlarge,然后绑定到父组件的事件handle中去,从而改变父组件的值**。实际上,就是调用了父组件内部的函数,来改变父组件。**

 //子组件信息Vue.component('menu-item',{props:['arr4'],template: `<div><ul><li :key="index" v-for="(item,index) in arr4">{{item}}</li></ul><button @click='$emit("enlarge")'>扩大父组件字体</button></div>`})var vm= new Vue({el:'#app',data:{msg:"父组件信息",arr:["first","second"],fontSize:10},methods:{handle:function(){this.fontSize+=5}}})
<div id="app"><div :style='{fontSize:fontSize+"px"}'>文字</div><menu-item :arr4="arr" @enlarge="handle"></menu-item><!-- #app内部都是父组件的内容,子组件是这个menu-item标签定义的内容里面的那个button绑定了一个事件,在这里接收这个事件enlarge,然后绑定到父组件的事件handle中去从而改变父组件的值。实际上,就是调用了父组件内部的函数,来改变父组件。 --></div>

五,子组件向父组件传递信息


和四中的内容是差不多的,只是增加了一个参数(信息)。而在父组件中接收参数,则是用指定的$event

//子组件信息Vue.component('menu-item',{template: `<button @click='$emit("enlarge",20)'>扩大父组件字体</button>`})var vm= new Vue({el:'#app',data:{fontSize:10},methods:{handle:function(val){this.fontSize+=val}}})
<div id="app"><div :style='{fontSize:fontSize+"px"}'>文字</div><menu-item  @enlarge="handle($event)"></menu-item><!-- //在这里,把参数传递进去,只能用$event --></div>

六,兄弟组件之间的传值



至于要销毁事件,则只要把两个兄弟组件沟通的桥梁,也就是事件中心销毁就可以了!
要销毁事件中心,vue提供了一个方法$off,用来销毁事件:

<button @click="handle">销毁事件中心</button>

然而这个handle函数定义在父组件当中:

          var vm= new Vue({el:'#app',data:{fontSize:10},methods:{handle:function(val){hub.$off('tom-event')hub.$off('jery-event')}}})

也就是说,兄弟组件之间的通信,有以下几个步骤:
1,创建事件中心:

var hub =new Vue()

2,在对应子组件中利用mounted属性,设置事件的监听:
当vue对象初始化完成后,这里就开始监听,利用的是事件中心的$on方法,第一个参数是定义的事件名称,第二个参数是要做的函数,使用箭头函数是为了让this指向本组件的vue对象。

                 mounted:function(){//监听事件hub.$on('tom-event',(val)=>{this.num+=val})}

3,在本组件中定义handle函数,在handle函数中,通过事件中心的$emit()方法来调用对应的事件(定义在其他兄弟组件中),第一个参数是对应的事件名称,第二个参数是需要传入的值。

             methods:{handle:function(){hub.$emit('jery-event',1)//通过事件中心,调用jerry-event函数,参数是1},},

4,在html结构模板中定义函数

一旦点击,则执行本组件的handle函数,从而通过事件中心的hub.$emit方法,传入参数并执行定义在另一组件中的事件,

<button @click='handle'>点击<button>

5,事件的销毁
依旧是利用事件中心的$off方法,参数是想要删除的事件名称即可:

             handle:function(val){hub.$off('tom-event')hub.$off('jery-event')}

vue组件化开发学习笔记-2-组件间的数据交互相关推荐

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

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

  2. 三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放

    一.什么是组件化? 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题 ...

  3. Vue.js-Day02-PM【组件化开发(全局注册组件、局部注册组件、案例)、组件的配置选项、轮播图实例(左右切换按钮、底部导航栏、定时器、鼠标移入-图片静止)】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 4.组件化开发 4.1.组件的注册 全局注册 局部注册(只能在当前整个Vue实例的范围内才可以使用) 使用组件 ...

  4. Uniapp零基础开发学习笔记(5) -组件入门及容器组件使用

    Uniapp零基础开发学习笔记(5) -组件入门及容器组件使用 按照官网教程学习使用组件,并且重点把容器组件的应用进行了练习. 1.官网关于组件的介绍 组件是视图层的基本组成单元,是一个单独且可复用的 ...

  5. 组件化开发之如何封装组件

    自从React,Vue等前端框架在市面上大量使用之后,组件化开发逐渐成为了前端主流开发方式,今天我就在这里给大家分享一下在我们平时的开发中我们自己应该如何去封装组件.主要从以下三个方面给大家讲解: 什 ...

  6. 我的react组件化开发道路(二) 分页 组件开发

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章主要写了关于react组件化开发的一些基本配置,慢慢的深入到每个组件的详细介绍中,今天我们就来分享react的分页组 ...

  7. 【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)

    目录 一.前言 完整内容请关注: 二.父组件给子组件传递数据 1.使用props属性,父组件向子组件传递数据 1.使用组件的props属性 2.向cmessage对象传值 2. props属性使用 1 ...

  8. 学习swing鼠标点击事件心得体会_西门子COMOS软件开发定制学习8-查询列表间的数据交互...

    ​本篇在西门子COMOS软件开发定制学习6-管理界面定制基础上定制,简单介绍两个查询列表之间的数据交互. 实现效果: 在左侧列表中选择某一设备,右侧列表自动根据所选设备,显示该设备相关的设计图纸(如P ...

  9. Django全栈开发学习笔记(十二)——数据的增、删、改、查

    数据表操作 数据表操作主要为增.删.改.查.执行SQL语句和实现数据库事务等操作 数据新增:有模型实例化对象调用内置方法实现数据新增 数据修改必须执行一次数据查询,在对查询结果进行修改操作,常用方法有 ...

  10. JSP/Servlet临汾天泰学习笔记(二)JSP数据交互

    20190923上课记录 JSP内置对象 (内置对象,jsp中默认创建的对象,我们可直接使用) 常用的内置对象有五个:out.request.response.session.application ...

最新文章

  1. Python核心资料:Django+Scrapy+Hadoop+数据挖掘+机器学习+精选视频(免费领)
  2. SHOI2008仙人掌图(tarjan+dp)
  3. ideal连接数据库报错The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time
  4. EOJ Monthly 2020.9 Sponsored by TuSimple E. 加密的情书
  5. css 透明度_如何使用CSS实现精美视频片头制作
  6. linux 环境搭建 Sentinel 控制台
  7. java 字符串比较 == equals_Java在比较字符串的时候,equals 与== 完全一样呀?
  8. 计算机职称考试知识点,职称计算机考试复习知识点
  9. 苹果“撞上”反垄断,围墙花园能否坚挺?
  10. 一、TensorFlow的简介和安装和一些基本概念
  11. Scatter matrix(散布矩阵)
  12. Jmeter学习之旅(四)——各类型的HTTP接口功能测试
  13. endnote X7 超级初学者教程
  14. OBS录制高清视频卡顿原因之一:OBS缓存数据写入磁盘不及时
  15. 如何重装win10应用商店?
  16. 【转】从机器学习谈起
  17. 基于sa866的电磁搅拌器计算机控制系统,一种新型电磁搅拌器计算机控制系统
  18. python期末考试是怎么考的_python期末考试复习
  19. mysql 语句 面试题
  20. Vite + Vue3 项目中,使用 vw/vh 适配移动端,并通过 Android Studio 打包

热门文章

  1. HashMap源码分析(保姆式注解):三大方法(构造、Put、Remove) ;附带面试考点及博主免费答疑
  2. 用傅里叶分析得到频域信息 MATLAB,信号分析实验_傅里叶matlab实现.doc
  3. 升级安装php7要考虑的几个方面
  4. 学习总结 java 父子级
  5. 服务器环境配置nginx / php / php-fpm(二)
  6. 【BZOJ】【2730】【HNOI2012】矿场搭建
  7. PHP每天自动更新静态文件下载地址,防盗链
  8. Table变量和临时表区别
  9. 并发编程学习之Lock同步锁
  10. 20172304 2017-2018-2 《程序设计与数据结构》第五周学习总结