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 动态加载脚本的4种方法
May 05 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 Javascript
通过JavaScript控制字体大小的代码
Oct 04 Javascript
JS打印gridview实现原理及代码
Feb 05 Javascript
JS Date函数整理方便使用
Oct 23 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
Dec 31 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
jQuery子元素过滤选择器用法示例
Sep 09 Javascript
BootStrap给table表格的每一行添加一个按钮事件
Sep 07 Javascript
angular异步验证器防抖实例详解
Mar 31 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开发框架myqee新手快速入门教程
2014/07/14 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
javascript 禁止复制网页
2009/06/11 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
python list转dict示例分享
2014/01/28 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
python实现机器人卡牌
2019/10/06 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
《九寨沟》教学反思
2014/04/08 职场文书
护士2014年终工作总结
2014/11/11 职场文书
行政处罚告知书
2015/07/01 职场文书