vue.js自定义组件实现v-model双向数据绑定的示例代码


Posted in Javascript onJanuary 08, 2020

我们都清楚v-model其实就是vue的一个语法糖,用于在表单控件或者组件上创建双向绑定。

//表单控件上使用v-model
<template>
 <input type="text" v-model="name" />
 <input type="checkbox" v-model="checked"/>
 <!--上面的input和下面的input实现的效果是一样的-->
 <input type="text" :value="name" @input="name=e.target.vlaue"/>
 <input type="checkBox" :checked="checked" @click=e.target.checked/>
 {{name}}
</template>
<script>
export default{
 data(){
  return {
   name:"",
   checked:false,
  }
 }
}
</script>

vue中父子组件的props通信都是单向的。父组件通过props向下传值给子组件,子组件通过$emit触发父组件中的方法。所以自定义组件是无法直接使用v-model来实现v-model双向绑定的。那么有什么办法可以实现呢?

//父组件
<template>
 <div>
  <c-input v-model="form.name"></c-input>
  <c-input v-model="form.password"></c-input>
  <!--上面的input等价于下面的input-->
 <!--<c-input :value="form.name" @input="form.name=e.target.value"/>
  <c-input :value="form.password" @input="form.password=e.target.value"/>-->
 </div>
</template>
<script>
import cInput from "./components/Input"
export default {
 components:{
  cInput
 },
 data() {
  return {
   form:{
    name:"",
    password:""
   },
   
  }
 },
}
</script>
//子组件 cInput
<template>
  <input type="text" :value="inputValue" @input="handleInput">
</template>
<script>
export default {
 props:{
  value:{
   type:String,
   default:"",
   required:true,
  }
 },
 data() {
  return {
   inputValue:this.value,
  }
 },
 methods:{
  handleInput(e){
   const value=e.target.value;
   this.inputValue=value;
   this.$emit("input",value);
  },
 }
}
</script>

根据上面的示例代码可以看出,子组件c-input上绑定了父组件form的值,在子组件中通过:value接收了这个值,然后我们在子组件中修改了这个值,并且通过$emit触发了父组件中的input事件将修改的值又赋值给了form。

综上就实现了自定义组件中的双向数据绑定!

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

Javascript 相关文章推荐
wordpress之js库集合研究介绍
Aug 17 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
jquery控制左右箭头滚动图片列表的实例
May 20 Javascript
jQuery遍历Form示例代码
Sep 03 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
微信小程序实现吸顶效果
Jan 08 #Javascript
JS实现吸顶特效
Jan 08 #Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 #Javascript
electron+vue实现div contenteditable截图功能
Jan 07 #Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
Jan 07 #Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 #Javascript
微信小程序服务器日期格式化问题
Jan 07 #Javascript
You might like
也谈 PHP 和 MYSQL
2006/10/09 PHP
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP防盗链代码实例
2014/08/27 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
网页常用特效代码整理
2006/06/23 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
Python json格式化打印实现过程解析
2020/07/21 Python
详解Scrapy Redis入门实战
2020/11/18 Python
python中pdb模块实例用法
2021/01/15 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
护理专业的自荐信
2013/10/22 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python