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 相关文章推荐
javascript 原型继承介绍
Aug 30 Javascript
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
Js实现动态添加删除Table行示例
Apr 14 Javascript
AngularJS基础学习笔记之简单介绍
May 10 Javascript
node.js 动态执行脚本
Jun 02 Javascript
全面了解javascript三元运算符
Jun 27 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
Sep 03 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 Javascript
原生JS实现萤火虫效果
Mar 07 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
微信小程序实现吸顶效果
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
openflashchart 2.0 简单案例php版
2012/05/21 PHP
php代码书写习惯优化小结
2013/06/20 PHP
PHP简单遍历对象示例
2016/09/28 PHP
php封装的验证码类分享
2017/02/26 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
python数组过滤实现方法
2015/07/27 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
Flask之请求钩子的实现
2018/12/23 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
环境工程毕业生自荐信
2013/11/17 职场文书
护士节活动总结
2014/08/29 职场文书
员工试用期自我评价
2014/09/18 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书