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 相关文章推荐
用一段js程序来实现动画功能
Mar 06 Javascript
JavaScript对象创建及继承原理实例解剖
Feb 28 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
Jul 05 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
Bootstrap整体框架之JavaScript插件架构
Dec 15 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
Javascript实现跨域后台设置拦截的方法详解
Aug 04 Javascript
利用Vue2.x开发实现JSON树的方法
Jan 04 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
Sep 17 Javascript
React实现todolist功能
Dec 28 Javascript
微信小程序实现吸顶效果
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语法速查表
2006/12/06 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
php自定义错误处理用法实例
2015/03/20 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
python如何对实例属性进行类型检查
2018/03/20 Python
django 外键model的互相读取方法
2018/12/15 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
Python函数和模块的使用总结
2019/05/20 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
化妆品店促销方案
2014/02/24 职场文书
小学语文国培感言
2014/03/04 职场文书
保护环境倡议书范文
2014/05/13 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
公司宣传语大全
2015/07/13 职场文书
小学远程教育工作总结
2015/08/13 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
话题作文之呼唤
2019/12/18 职场文书