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 相关文章推荐
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 Javascript
jQuery学习笔记之toArray()
Jun 09 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
JavaScript数组操作详解
Feb 04 Javascript
vue使用Axios做ajax请求详解
Jun 07 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
总结js函数相关知识点
Feb 27 Javascript
详解JavaScript中操作符和表达式
Sep 12 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
May 09 Javascript
javascript sort()对数组中的元素进行排序详解
Oct 13 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 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 Cookie处理函数
2016/06/10 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
Python实现的批量下载RFC文档
2015/03/10 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
自定义django admin model表单提交的例子
2019/08/23 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
python GUI模拟实现计算器
2020/06/22 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
安全在我心中演讲稿
2014/09/01 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
党员评议思想汇报
2014/10/08 职场文书
团队会宣传标语
2014/10/09 职场文书
体育教师教学随笔
2015/08/15 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
调研报告的主要写法
2019/04/18 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
mysql配置SSL证书登录的实现
2021/09/04 MySQL
i7 6700处理器相当于i5几代
2022/04/19 数码科技