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 相关文章推荐
javascript 操作cookies及正确使用cookies的属性
Oct 15 Javascript
javascript 哈希表(hashtable)的简单实现
Jan 20 Javascript
jQuery select操作控制方法小结
May 26 Javascript
JS定义回车事件(实现代码)
Jul 08 Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
JavaScript实现时钟滴答声效果
Jan 29 Javascript
D3.js中强制异步文件读取同步的几种方法
Feb 06 Javascript
vue 修改 data 数据问题并实时显示的方法
Aug 27 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
原生js实现九宫格拖拽换位
Jan 26 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模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
跟我学Laravel之路由
2014/10/15 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
js实现筛选功能
2020/11/24 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Python3 assert断言实现原理解析
2020/03/02 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
优秀的教师个人的中文求职信
2013/09/21 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js