自定义Vue中的v-module双向绑定的实现


Posted in Javascript onApril 17, 2019

v-module 双向绑定实际上就是通过子组件中的 $emit 方法派发 input 事件,父组件监听 input 事件中传递的 value 值,并存储在父组件 data 中;然后父组件再通过 prop 的形式传递给子组件 value 值,再子组件中绑定 input 的 value 属性即可。

我们着手实现一遍:

子组件传值

首先子组件需要一个 input 标签,这个 input 标签需要绑定 input 事件,$emit 触发父组件的 input 事件,通过这种方法子组件传递值给父组件

<input type="text" @input="$emit('input', $event.target.value)">

父组件监听 input 事件,然后将事件携带的 input 输入的值传入到 data 状态中

<my-comp @input="value = $event"></my-comp>
export default {
 // ...
 data () {
  return {
   value: 'initial value' // 维护一个 value 状态
  }
 }
}

至此子组件监听 input 事件,用户输入字符串即可被父组件获取到并保存在 data 状态中

父组件传值

然后父组件还需要将 value 值传递给子组件,子组件再绑定 value 值到 input 的 value 属性上

<my-comp :value="value" @input="value = $event"></my-comp>

增加 :value="value" 通过 prop 传递 value

子组件中绑定 input 的 value 属性

<input type="text" @input="$emit('input', $event.target.value)" :value="value">

注意 props 中需要设定 value

export default {
 name: 'MyComp',
 props: ['value']
}

至此自定义的 v-module 处理完毕,看看效果:

自定义Vue中的v-module双向绑定的实现

其他元素使用 v-model

在 input 上使用 v-model 比较简单,但考虑到其他元素不一定是要监听 input 事件而是 change 事件,也不一定是 value 属性改变元素的内容。比如 checkbox,我们就需要监听 change 事件,以及 checked 属性。

那么先手动实现一遍:

<input type="checkbox" @change="$emit('change', $event.target.checked)" :checked="checked">

子组件首先监听 change 事件,并 $emit 方法触发父组件的 change 事件,将 checked 属性值传入给父组件;同时接收父组件传递进来的 checked 值,根据 checked 值决定 input 元素的 checked 属性。

export default {
 name: 'MyComp',
 props: ['checked']
}

然后需要修改父组件:

<my-comp @change="checked = $event"></my-comp>
export default {
  // ...
 data () {
  return {
   checked: false
  }
 }
}

父组件监听 change 事件,并在 data 中维护状态 checked,默认值为 false

最后看看效果:

自定义Vue中的v-module双向绑定的实现

直接使用 v-model 指令

此外还可直接使用 v-model 指令:

<my-comp v-model="checked"></my-comp>

但需要在组件中修改 v-model 指令,指定 prop 和 event:

export default {
 name: 'MyComp',
 props: ['checked'],
 model: {
  prop: 'checked',
  event: 'change'
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript MD4
Dec 20 Javascript
JS setCapture 区域外事件捕捉
Mar 18 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
JavaScript在多浏览器下for循环的使用方法
Nov 07 Javascript
Javascript检查图片大小不要让大图片撑破页面
Nov 04 Javascript
jQuery中fadeOut()方法用法实例
Dec 24 Javascript
Node.js抓取中文网页乱码问题和解决方法
Feb 10 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
webpack入门必知必会
Jan 16 Javascript
小程序如何构建骨架屏
May 29 Javascript
微信公众平台 发送模板消息(Java接口开发)
Apr 17 #Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
Apr 17 #Javascript
vue获取时间戳转换为日期格式代码实例
Apr 17 #Javascript
微信小程序bindinput与bindsubmit的区别实例分析
Apr 17 #Javascript
vue 项目 iOS WKWebView 加载
Apr 17 #Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
Apr 17 #Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
Apr 17 #Javascript
You might like
php自动加载autoload机制示例分享
2014/02/20 PHP
JS 判断代码全收集
2009/04/28 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
2018/09/16 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
Python 初始化多维数组代码
2008/09/06 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python生成器generator原理及用法解析
2020/07/20 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python如何绘制疫情图
2020/09/16 Python
火山动力Java笔试题
2014/06/26 面试题
劳资专员岗位职责
2013/12/27 职场文书
前台文员我鉴定
2014/01/12 职场文书
法学院方阵解说词
2014/01/29 职场文书
家电业务员岗位职责
2014/03/10 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
信用卡工资证明范本
2014/10/17 职场文书
军人离婚协议书样本
2014/10/21 职场文书
支行行长岗位职责
2015/02/15 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
航班延误投诉信
2015/07/02 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
《认识年月日》教学反思
2016/02/19 职场文书