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阻止事件冒泡
Mar 20 Javascript
JavaScript实现复制功能各浏览器支持情况实测
Jul 18 Javascript
javascript判断机器是否联网的2种方法
Aug 09 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
Sep 14 Javascript
实例详解jQuery表单验证插件validate
Jan 18 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
BootStrap表单验证实例代码
Jan 13 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
Vue EventBus自定义组件事件传递
Jun 25 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
python非递归全排列实现方法
2017/04/10 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
员工自我鉴定
2013/10/09 职场文书
学校安全检查制度
2014/01/27 职场文书
《自然之道》教学反思
2014/02/11 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
2015年保险公司工作总结
2015/04/24 职场文书