自定义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 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
将jQuery应用于login页面的问题及解决
Oct 17 Javascript
node.js中的forEach()是同步还是异步呢
Jan 29 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
jquery获取transform里的值实现方法
Dec 12 jQuery
layui数据表格实现重载数据表格功能(搜索功能)
Jul 27 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
微信公众平台 发送模板消息(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代码
2010/08/08 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
angularjs基础教程
2014/12/25 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
使用python实现链表操作
2018/01/26 Python
python实现简单五子棋游戏
2019/06/18 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
自习课吵闹检讨书范文
2014/09/26 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
党支部鉴定意见
2015/06/02 职场文书
大学生实习证明
2015/06/16 职场文书
详解Nginx 工作原理
2021/03/31 Servers