浅析Vue自定义组件的v-model


Posted in Javascript onNovember 26, 2017

最近在学习vue,今天看到自定义事件的表单输入组件,纠结了一会会然后恍然大悟...官方教程写得不是很详细,所以我决定总结一下。

v-model语法糖

v-model实现了表单输入的双向绑定,我们一般是这么写的:

<div id="app">
   <input v-model="price">
 </div>
 new Vue({
   el: '#app',
   data: {
     price: ''
   }
 });

通过该语句实现price变量与输入值双向绑定

实际上v-model只是一个语法糖,真正的实现是这样的:

<input type="text" 


:value="price" 



@input="price=$event.target.value">

以上代码分几个步骤:

1.将输入框的值绑定到price变量上,这个是单向绑定,意味着改变price变量的值可以改变input的value,但是改变value不能改变price

2.监听input事件(input输入框都有该事件,当输入内容时自动触发该事件),当输入框输入内容就单向改变price的值

这样就实现了双向绑定。

自定义表单输入组件

我们平时写input可以不像上面那么复杂,直接用v-model就行了,但是既然我们研究这个语法糖那肯定是有别的用处,比如说自定义表单输入框组件。

<div id="app">
   <input-price v-model="price"></input-price>
 </div>
 Vue.component('input-price', {
   template: '<input type='text'>'
 });
 new Vue({
   el: '#app',
   data: {
     price: ''
   }
 });

上面的<input-price>是我们自定义的表单输入组件,我们能直接用v-model实现双向绑定吗?如果你觉得可以那你就是Too young了~

首先根据我们的v-model语法糖来看

1.我们的子组件(input-price)的value需要绑定一个从父组件传来的值,通过子组件的props接收
2.在子组件上有新的输入时需要触发父组件的input事件,并将新的值作为参数传递给父组件

<div id="app"> 
   <!-- <price-input v-model="price"></price-input> -->
 
   <!-- 手动实现了v-model双向绑定 -->
   <!-- 3、父组件的input事件被触发,将传来的值赋给父组件的变量price -->
   <!-- 4、父组件value的值绑定到price -->
   <price-input :value="price" @input="onInput"></price-input>
   <p>{{price}}</p>
 </div>
 Vue.component('price-input', {
   // 5、将父组件的value值通过props传递给子组件
   // 1、当有数据输入时触发了该组件的input事件
   template: '<input :value="value" @input="updateVal($event.target.value)" type="text">',
   props: ["value"], 
   methods: {
      updateVal: function(val) {
       // 2、手动触发父组件的input事件并将值传给父组件
       this.$emit('input', val); 
     }
   }
 });
 var app = new Vue({
   el: '#app',
   data: {
     price: ''
   },
   methods: {
      onInput: function(val) {
        this.price = val;
      }
    }
 });

这里备注了几个步骤:

1.当有数据输入时触发了该组件的input事件

2.手动触发父组件的input事件并将值传给父组件

3.父组件的input事件被触发,将传来的值赋给父组件的变量price,实现输入框value到父元素的price的单向绑定

4.父组件value的值绑定到price

5.将父组件的value值通过props传递给子组件,实现了父组件的price到子组件value的单向绑定

小小的总结一下:

•v-bind只能实现单向绑定
•v-model(v-bind+触发的input事件)实现双向绑定

以上所述是小编给大家介绍的浅析Vue自定义组件的v-model ,希望对大家有所帮助!

Javascript 相关文章推荐
几个javascript操作word的参考代码
Oct 26 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
Aug 17 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
Jul 14 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
Express之托管静态文件的方法
Jun 01 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 #Javascript
Javacript中自定义的map.js  的方法
Nov 26 #Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 #Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 #Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 #Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 #Javascript
zTree节点文字过多的处理方法
Nov 24 #Javascript
You might like
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
超级简单的php+mysql留言本源码
2009/11/11 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
python中xrange和range的区别
2014/05/13 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
python爬虫之自制英汉字典
2019/06/24 Python
python3调用windows dos命令的例子
2019/08/14 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
python软件都是免费的吗
2020/06/18 Python
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
团队精神演讲稿
2013/12/31 职场文书
综合实践教学反思
2014/01/31 职场文书
残疾人小组计划书
2014/04/27 职场文书
求职信标题怎么写
2014/05/26 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
水电维修专业推荐信
2014/09/06 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
给客户的感谢信
2015/01/21 职场文书
横空出世观后感
2015/06/09 职场文书