vue2.0实现父子通信(基于之前我写的复选框组件)
2017-01-18 15:57
816 查看
不久前分享了我自己写的多选框组件(http://download.csdn.net/detail/lemon_zhao/9705162),基于vue1.0写的,最近写的项目是vue2.0的,顺道把这个组件做了下升级,1.0和2.0差别还是蛮大的,走了不少弯路,特地总结一下!!
1.套用官网上的一句话总结父子通信的问题,props down, events up,父级往子集通信用props属性,子集往父级通信用事件
2.父级页面代码如下,v-bind:status是传递给子级的参数,v-on:switched是触发的回调
3.子集代码如下,首次渲染的时候,在props里获取传递的数据,赋值给data函数,后面如果父级元素改变的话,用watch监听。传递给父级用methods里的doEmit触发父级的回调(1.0的dispatch被取消了...)
实现逻辑如下:
1.套用官网上的一句话总结父子通信的问题,props down, events up,父级往子集通信用props属性,子集往父级通信用事件
2.父级页面代码如下,v-bind:status是传递给子级的参数,v-on:switched是触发的回调
<iphoneSwitcher v-bind:status="ipInfo.status" v-bind:canSwitch="true" v-bind:index="index" v-on:switched="ipSwitchCallback"></iphoneSwitcher>
3.子集代码如下,首次渲染的时候,在props里获取传递的数据,赋值给data函数,后面如果父级元素改变的话,用watch监听。传递给父级用methods里的doEmit触发父级的回调(1.0的dispatch被取消了...)
实现逻辑如下:
module.exports = { name: 'iphoneSwitcher', props: ['status','canSwitch','index','callBackName'], data: function() { var status = this.status; var canSwitch = this.canSwitch; var index = this.index || 0; var callBackName = this.callBackName || null; // console.log(callBackName) var data = { currentStatus: status, currentCanSwitch: canSwitch, currentIndex: index, currenCallBackName: callBackName } return data }, mounted: function(){ }, watch: { status: function (val, oldVal) { console.log('watch到currentStatus:' + val) this.currentStatus = val; }, canSwitch: function(val, oldVal){ console.log('watch到currentCanSwitch:' + val) this.currentCanSwitch = val; } }, methods:{ doSwitcher: function(){ // console.log(this.currentStatus) // console.log(this.currentCanSwitch) var mySelf = this; var currentCanSwitch = mySelf.currentCanSwitch; var currentStatus = mySelf.currentStatus; var currenCallBackName = mySelf.currenCallBackName; // 判断能否点击 if (currentCanSwitch == true){ console.log('可以通过点击 修改!') mySelf.currentStatus = !currentStatus; mySelf.doEmit(); } else{ console.log('不能通过点击 修改!触发父级回调!' + currenCallBackName) var callBack = mySelf.$parent[currenCallBackName] if (callBack){ callBack(mySelf.currentIndex) } } }, doEmit: function(){ console.log('派发!') this.$emit('switched', this.currentStatus,this.currentIndex); } } }
相关文章推荐
- Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
- c#中异步基于消息通信的完成端口的TCP/IP协议的组件实现(源代码) 服务器端
- c#中异步基于消息通信的完成端口的TCP/IP协议的组件实现(源代码) 客户端
- Angular2实现父子组件通信(详解)
- 详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
- Vue2.0 之父子兄弟组件间通信
- c#中异步基于消息通信的完成端口的TCP/IP协议的组件实现(源代码)
- vue项目中v-model父子组件通信的实现详解
- [js高手之路]Vue2.0基于vue-cli+webpack父子组件通信教程
- vue2.0+基础知识连载(15)--- 父子组件通信
- c#中异步基于消息通信的完成端口的TCP-IP协议的组件实现(服务器端-源代码)
- vue.js学习笔记(六)--利用v-model实现父子组件间的双向通信
- vue2.0父子组件间通信的实现方法
- Angular 2父子组件之间共享服务通信的实现
- Vue2.0学习之详解Vue 组件及父子组件通信
- c#中异步基于消息通信的完成端口的TCP/IP协议的组件实现(客户端-源代码)
- Angularjs2-下拉列表实现(父子组件通信)
- [js高手之路]Vue2.0基于vue-cli+webpack父子组件通信教程
- vue.js通过子组件通信和父子组件通信实现动态表单动态绑定事件(适合交互系统统一使用)
- 基于vue2.0以及better-scroll实现scroll滑动组件及所实现组件的应用例子