在vue.js现在比较流行,层出不穷的js框架越来越强调数据绑定,组件化开发。

正在给公司做一个管理后台,基本思路是编写几个通用组件,采用单页面应用的形式完成;

结构大致如下:

mainVue

  leftMenu

  commlist

  modalView

其中3个字组件要相互通信并且和主vue实例通信,我在v1.0 实现方式是:

使用$emit向上传递事件,mainVue使用$on监听传递来的信息,然后父组件处理后使用$dispatch进行事件分发;其他需要进行交互的组件在设置监听方法;

这个方法在一个页面里有几个组件时还好处理,当组件数量越来越多的时候,尤其是到处充充斥着$emit/$dispatch,处理起来比较头疼。

这里就不贴vue1的代码了,因为这不是本次总结的重点;

---------------------------------------以下内容是本次个人总结重点------------------------------------------------------------------------------------------------

vue2.0废弃了一些方法,比如上文提到的$dispatch,这使得vue1的方法不能使用,要重写;

组件间的通信,在2.0里,官方文档给出了解决方案:采用一个事件管理中心和props的方法进行通讯;

实现效果如下:

index.html

  1. <div class="container-fluid" id="father">
  2. <div class="container">
  3. <div class="row">
  4. <ul class="list-group">
  5. <li class="list-group-item list-group-item-success">父组件</li>
  6. <li class="list-group-item">您的姓名是:<b class="text-danger">{{name}}</b><br></li>
  7. <li class="list-group-item">您的年龄是:<b class="text-danger">{{births}}</b></li>
  8. </ul>
  9. </div>
  10. <div class="row">
  11. <div class="col-sm-6">
  12. <div class="panel panel-info">
  13. <div class="panel-heading">子组件A</div>
  14. <div class="panel-body">
  15.  
  16. <ybxs ref="names"></ybxs>
  17.  
  18. </div>
  19. </div>
  20. </div>
  21. <div class="col-sm-6">
  22. <div class="panel panel-info">
  23. <div class="panel-heading">子组件B</div>
  24. <div class="panel-body">
  25.  
  26. <ybxs-brother ref="birth" :pname="name"></ybxs-brother>
  27.  
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <script>
  35. var father = new Vue({
  36. el:'#father',
  37. data:{
  38. name:'',
  39. births:''
  40. }
  41. });
  42. </script>

在components.js里使用$emit方法发送事件或信息,

  1. let ybxs = Vue.component('ybxs',{
  2. template:'<div>请输入您的姓名:<br><input v-on:change="inputName()" type="text" v-model="userName"/></div>',
  3. data:function(){
  4. return {userName:''}
  5. },
  6. methods:{
  7. inputName:function(){
  8. let _this = this;
  9. eventCenter.$emit('nameChange',_this.userName);
  10. }
  11. }
  12. });
  13. let ybxsBrother = Vue.component('ybxsBrother',{
  14. template:'<div>请选择<b class="text-danger">{{pname}}</b>出生日期:{{selectYear}}<br><select v-model="selectYear" v-on:change="selectYears()"><option v-for="item in years" :value="item">{{item}}</option></select></div>',
  15. data:function(){
  16. return {selectYear:'',years:[1989,1990,1991,1992,1993,1994,1995,1996]}
  17. },
  18. props:['pname'],
  19. methods:{
  20. selectYears:function(){
  21. let _this = this;
  22. eventCenter.$emit('yearChange',_this.selectYear);
  23. }
  24. }
  25. });

定义一个事件管理中心,用来处理组件间的事件及数据传递

  1. //定义一个事件管理中心
  2. let eventCenter = new Vue();
    //处理名称事件
  3. eventCenter.$on('nameChange',function(data){
  4. father.name = data;
  5. });
    //处理出生年份选择
  6. eventCenter.$on('yearChange',function(data){
  7. father.births = data;
  8. });

完整DEMO的Github地址是:https://github.com/HUA1/vue2.git

v2.0 组件通信的总结的更多相关文章

  1. vue2.0组件通信各种情况总结与实例分析

    Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用props传递数据---组件内部 //html & ...

  2. vue29-vue2.0组件通信_recv

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

  3. vue2.0 组件通信

    组件通信: 子组件要想拿到父组件数据 props 子组件不允许直接给父级的数据, 赋值操作如果想更改,父组件每次穿一个对象给子组件, 对象之间引用. 例子: <script> window ...

  4. vue2.0组件通信小总结

    1.父组件->子组件 父组件 <parent> <child :child-msg="msg"></child>//这里必须要用 - 代替 ...

  5. 通信vue2.0组件

    vue2.0组件通信各种情况总结与实例分析   Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用p ...

  6. vue2.0父子组件通信的方法

    vue2.0组件通信方法:props传值和emit监听.(.sync方法已经移除.详情请点击)(dispatch-和-broadcast方法也已经废弃) props方法传值:Props 现在只能单项传 ...

  7. vue2.0 父子组件通信 兄弟组件通信

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

  8. Vue2.0组件之间通信(转载)

    Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单.笔者之前有写过一篇Vue2.0子父组件通信,这次我们就来聊一聊平级组件之间的通信. 首先我们先搭好开 ...

  9. vue2.0 $emit $on组件通信

    在vue1.0中父子组件通信使用$dispatch 和 $broadcast,但是在vue2.0中$dispatch 和 $broadcast 已经被弃用. 因为基于组件树结构的事件流方式实在是让人难 ...

随机推荐

  1. POJ 1789 Truck History【最小生成树简单应用】

    链接: http://poj.org/problem?id=1789 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  2. 不恰当使用线程池处理 MQ 消息引起的故障

    现状 业务部门反应网站访问特别慢,负责运维监控的同事说MQ消息队列积压了,中间件的说应用服务器内存占用很高,GC 一直回收不了内存,GC 线程占了近 100% 的 CPU,其他的基本上都在等待,数据库 ...

  3. 006-重装yum

    报错情况: There was a problem importing one of the Python modulesrequired to run yum. The error leading ...

  4. Linux:Ubuntu16.04下创建Wifi热点

    Linux:Ubuntu16.04下创建Wifi热点说明 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章参考自编程人生 具体步骤如下: 1. 点击 ...

  5. 字典,字符串,元组,字典,集合set,类的初步认识,深浅拷贝

    Python之路[第二篇]:Python基础(一)   入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'Jaso ...

  6. springboot-vue项目前台1

  7. Linux Shell编程 条件判断语法

    if条件判断语句 单分支 if 条件语句 语法格式: if [条件判断式];then 程序 fi 或者 if [条件判断式] then 程序 fi 在使用单分支 if 条件查询时需要注意几点: if ...

  8. QT 数字图像处理 笔记一

    1.被有符号整数和无符号整数十足的坑了一上午.我在实现图像旋转的时候先把坐标轴中心平移到图像中心:painter.translate(up_x+temp_w,up_y+temp_h);注意这里面各个数 ...

  9. Android Opencv NativeCameraView error in 5.0 lollipop versions (Bug #4185)

    https://github.com/opencv/opencv/wiki http://code.opencv.org/issues/4185 Hello, I finally get a ride ...

  10. Struts2笔记04——Hello World Example(转)

    原文地址:https://www.tutorialspoint.com/struts_2/ [注释]项目结构,次序估计有误 通过学习Struts2的架构,我们可以知道,在Struts2 web应用中, ...