博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue之自定义组件的v-model
阅读量:4687 次
发布时间:2019-06-09

本文共 1826 字,大约阅读时间需要 6 分钟。

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

 

v-model语法糖

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

1 
2
3
1 new Vue({2     el: '#app',3     data: {4          price: ''5     }6 });

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

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

1 

以上代码分几个步骤:

  1. 将输入框的值绑定到price变量上,这个是单向绑定,意味着改变price变量的值可以改变input的value,但是改变value不能改变price
  2. 监听input事件(input输入框都有该事件,当输入内容时自动触发该事件),当输入框输入内容就单向改变price的值

这样就实现了双向绑定。

 

自定义表单输入组件

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

1 
2
3
1 Vue.component('input-price', {2     template: ''3 });4 new Vue({5     el: '#app',6     data: {7          price: ''8     }9 });

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

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

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

{

{price}}

9

 

1 Vue.component('price-input', { 2     // 5、将父组件的value值通过props传递给子组件 3     // 1、当有数据输入时触发了该组件的input事件 4     template: '', 5     props: ["value"],  6     methods: { 7          updateVal: function(val) { 8             // 2、手动触发父组件的input事件并将值传给父组件 9             this.$emit('input', val);  10          }11      }12 });13 var app = new Vue({14      el: '#app',15      data: {16          price: ''17      },18      methods: {19           onInput: function(val) {20                this.price = val;21           }22       }23  });

这里备注了几个步骤:

  1. 当有数据输入时触发了该组件的input事件
  2. 手动触发父组件的input事件并将值传给父组件
  3. 父组件的input事件被触发,将传来的值赋给父组件的变量price,实现输入框value到父元素的price的单向绑定
  4. 父组件value的值绑定到price
  5. 将父组件的value值通过props传递给子组件,实现了父组件的price到子组件value的单向绑定

 

小小的总结一下:

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

 

如果大家有什么意见或建议希望大家在评论区多多交流,谢谢。

转载于:https://www.cnblogs.com/wind-lanyan/p/7899428.html

你可能感兴趣的文章
P1351 联合权值[鬼畜解法]
查看>>
Best Time to Buy and Sell Stock with Cooldown_LeetCode
查看>>
nginx+tomcat反向代理
查看>>
postgressql数据库中limit offset使用
查看>>
linux下如何添加一个用户并且让用户获得root权限
查看>>
搭建Extjs框架(二)
查看>>
NSDateFormatter的说明
查看>>
测试思想-集成测试 关于接口测试 Part 2
查看>>
测试思想-测试设计 史上最详细测试用例设计实践总结 Part1
查看>>
windows下mysql密码忘了怎么办?【转】
查看>>
java文件上传和下载
查看>>
SQL联合查询(内联、左联、右联、全联)的语法(转)
查看>>
枚举和实用类
查看>>
python基础知识第二篇(字符串)
查看>>
php生成器使用总结
查看>>
android studio 导入第三方库的记录
查看>>
T-SQL中的indexof函数
查看>>
javascript基础之数组(Array)对象
查看>>
mysql DML DDL DCL
查看>>
RAMPS1.4 3d打印控制板接线与测试1
查看>>