在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

<div class="container-fluid" id="father">
<div class="container">
<div class="row">
<ul class="list-group">
<li class="list-group-item list-group-item-success">父组件</li>
<li class="list-group-item">您的姓名是:<b class="text-danger">{{name}}</b><br></li>
<li class="list-group-item">您的年龄是:<b class="text-danger">{{births}}</b></li>
</ul>
</div>
<div class="row">
<div class="col-sm-6">
<div class="panel panel-info">
<div class="panel-heading">子组件A</div>
<div class="panel-body"> <ybxs ref="names"></ybxs> </div>
</div>
</div>
<div class="col-sm-6">
<div class="panel panel-info">
<div class="panel-heading">子组件B</div>
<div class="panel-body"> <ybxs-brother ref="birth" :pname="name"></ybxs-brother> </div>
</div>
</div>
</div>
</div>
</div>
<script>
var father = new Vue({
el:'#father',
data:{
name:'',
births:''
}
});
</script>

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

let ybxs = Vue.component('ybxs',{
template:'<div>请输入您的姓名:<br><input v-on:change="inputName()" type="text" v-model="userName"/></div>',
data:function(){
return {userName:''}
},
methods:{
inputName:function(){
let _this = this;
eventCenter.$emit('nameChange',_this.userName);
}
}
});
let ybxsBrother = Vue.component('ybxsBrother',{
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>',
data:function(){
return {selectYear:'',years:[1989,1990,1991,1992,1993,1994,1995,1996]}
},
props:['pname'],
methods:{
selectYears:function(){
let _this = this;
eventCenter.$emit('yearChange',_this.selectYear);
}
}
});

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

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

完整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. WCF基础之传输

    WCF中使用的主要传输的方式有HTTP,TCP和命名管道. 绑定包括可选的协议绑定元素(如安全),必需的编码绑定元素和必须的传输协定绑定元素三个部分,而由传输方式则是由传输绑定元素来决定的. HTTP ...

  2. 子单元通过 prop 接口与父单元进行了良好的解耦

    https://cn.vuejs.org/v2/guide/#起步 现在,我们可以使用 v-bind 指令将待办项传到循环输出的每个组件中: <div id="app-7"& ...

  3. 什么是 C++ 11 原始字符串?

    std::string path = "C:\\VulkanSDK";//需要转义 std::string path = R"(C:\VulkanSDK)";/ ...

  4. VCL控件组件大都应该重载TWinControl的虚函数WndProc来进行处理窗口消息的工作

    TWinControl的构造函数中会调用MakeObjectInstance并且传递MainWndProc作为窗口消息处理函数,而MainWndProc则会调用虚函数WndProc来处理窗口消息.留个 ...

  5. MySQL中锁问题

    1.脏读 脏页只是在缓冲池中已经修改的页但是没有刷新到磁盘中,即数据库实例内存中的页和磁盘中的页事不一致的,当然在刷新到磁盘之前,日志都已经被写入到了重做日志文件中,而所谓的脏数据是指事务对缓冲池中行 ...

  6. 我的Android进阶之旅------>(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?

    作者:马忠信,作者授权早读课发表,转载请联系作者. 原文链接:http://www.jianshu.com/p/c3387bcc4f6e#  互联网早读课:http://zaodula.com/arc ...

  7. Java 线程控制(输出奇偶数)

    两个线程,一个输出1,3,5,7......99:另一个输出2,4,6,8......100. 1.线程同步 public class ST2 { int i = 0; public static v ...

  8. RecyclerView添加分割线

    mRecyclerView = findView(R.id.id_recyclerview); //设置布局管理器 mRecyclerView.setLayoutManager(layout); // ...

  9. 入坑第二式 golang入坑系列

    史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...

  10. IDEA创建Tomcat8源码工程流程

    上一篇文章的产出,其实离不开网上各位大神们的辅助,正是通过他们的讲解,我才对Tomcat的结构有了更进一步的认识. 但在描述前后端交互的过程中,还有很多细节并没有描述到位,所以就有了研究Tomcat源 ...