Vue.js自定义事件的表单输入组件方法


Posted in Javascript onMarch 08, 2018

Vue.js使用自定义事件的表单输入组件

自定义事件可以用来创建自定义的表单输入组件,使用 v-model 来进行数据双向绑定。要牢记:

<input v-model="something">

这不过是以下示例的语法糖:

<input
 v-bind:value="something"
 v-on:input="something = $event.target.value">

所以在组件中使用时,它相当于下面的简写:

<custom-input
 v-bind:value="something"
 v-on:input="something = arguments[0]">
</custom-input>

所以要让组件的 v-model 生效,它应该 (从 2.2.0 起是可配置的):

接受一个 value prop

在有新的值时触发 input 事件并将新值作为参数

我们来看一个非常简单的货币输入的自定义控件:--在父组件中引用子组件模板时用绑定v-model数据:

<currency-input v-model="price"></currency-input>
Vue.component('currency-input', {
 template: '\
  <span>\
   $\
   <input\
    ref="input"\
    v-bind:value="value"\
    v-on:input="updateValue($event.target.value)"\
   >\
  </span>\
 ',
 props: ['value'],
 methods: {
  // 不是直接更新值,而是使用此方法来对输入值进行格式化和位数限制
  updateValue: function (value) {
   var formattedValue = value
    // 删除两侧的空格符
    .trim()
    // 保留 2 位小数
    .slice(
     0,
     value.indexOf('.') === -1
      ? value.length
      : value.indexOf('.') + 3
    )
   // 如果值尚不合规,则手动覆盖为合规的值
   if (formattedValue !== value) {
    this.$refs.input.value = formattedValue
   }
   // 通过 input 事件带出数值
   this.$emit('input', Number(formattedValue))
  }
 }
})

自定义组件的 v-model

2.2.0 新增

默认情况下,一个组件的 v-model 会使用 value prop 和 input 事件。但是诸如单选框、复选框之类的输入类型可能把 value 用作了别的目的。model 选项可以避免这样的冲突:

Vue.component('my-checkbox', {
 model: {
  prop: 'checked',
  event: 'change'
 },
 props: {
  checked: Boolean,
  // 这样就允许拿 `value` 这个 prop 做其它事了
  value: String
 },
 // ...
})
<my-checkbox v-model="foo" value="some value"></my-checkbox>

上述代码等价于:

<my-checkbox
 :checked="foo"
 @change="val => { foo = val }"
 value="some value">
</my-checkbox>

注意你仍然需要显式声明 checked 这个 prop。

以上这篇Vue.js自定义事件的表单输入组件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
javascript 对象数组根据对象object key的值排序
Mar 09 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
Jun 12 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 Javascript
手把手教你vue-cli单页到多页应用的方法
May 31 Javascript
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 Javascript
layui之select的option叠加问题的解决方法
Mar 08 #Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 #Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
Mar 08 #Javascript
Vue.js实现图片的随意拖动方法
Mar 08 #Javascript
JS字符串去除连续或全部重复字符的实例
Mar 08 #Javascript
实战node静态文件服务器的示例代码
Mar 08 #Javascript
vue.js或js实现中文A-Z排序的方法
Mar 08 #Javascript
You might like
使PHP自定义函数返回多个值
2006/11/26 PHP
php下实现折线图效果的代码
2007/04/28 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python绘制股票移动均线的实例
2019/08/24 Python
python退出循环的方法
2020/06/18 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
自主招生自荐信格式
2013/12/03 职场文书
总经理司机职责
2014/02/02 职场文书
演讲稿格式
2014/04/30 职场文书
环保倡议书范文
2014/05/12 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
太行山上观后感
2015/06/05 职场文书
寻找成龙观后感
2015/06/12 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers