Vue数字输入框组件示例代码详解


Posted in Javascript onJanuary 15, 2020

数字输入框组件

实现功能:只允许输入数字(包括小数)、允许设置初始值、最大值、最小值。

为了方便,这里选用Vue的 cli-service

Vue数字输入框组件示例代码详解

实现快速原型开发

首先template部分代码

<template>
 <div class="demo">
  <input-number v-model="value" :max="10" :min="0"></input-number>
 </div>
</template>

这部分没有什么特别说明的,分别传入 value、max、min 作为子组件的原始值最大值和最小值。在子组件中用 props 接收,独立组件,对每个传入的prop进行类型验证

主要JS部分代码

<script>
import Vue from 'vue'
Vue.component('input-number',{
 props: {
  value: {
   type: Number,
   default: 0
  },
  max: {
   type: Number,
   default: Infinity
  },
  min: {
   type: Number,
   default: -Infinity
  }
 },
 data() {
  return {
   currentValue: this.value
  }
 },
 render(cr) {
  let _this = this
  ...
 }
})
export default {
 data() {
  return {
   value: 5
  }
 }
}
</script>

在这里不能使用字符串的方式定义组件模板,所以使用 render() 函数的方式

render(cr) {
 let _this = this
 return cr('div',{'class': 'input-number'},[
  cr('button',{'class': {'down-btn':true,'dis':this.currentValue<=this.min},on: {click: _this.handleDown},},['-']),
  cr('input',{'class': 'change-input',domProps: {value: _this.currentValue}, on: {change: _this.handleChange}}),
  cr('button',{'class': {'down-btn':true,'dis':this.currentValue>=this.max},on: {click: _this.handleUp},},['+']),
 ])
}

定义 watch 和 methods

watch: {
 value(val) {
  this.updateValue(val)
 },
 currentValue(val) {
  this.$emit('input', val)
  this.$emit('on-change', val)
 }
},
methods: {
 updateValue(val) {
  if(val > this.max) val = this.max
  if(val < this.min) val = this.min
  this.currentValue = val
 },
 handleDown() {
  if(this.currentValue<=this.min) return
  this.currentValue-=1
 },
 handleUp() {
  if(this.currentValue>=this.max) return
  this.currentValue+=1
 },
 handleChange(ev) {
  let val = ev.target.value.trim()
  let max = this.max
  let min = this.min
  if(this.isValueNumber(val)) {
   val = Number(val)
   this.currentValue = val
   if(val > max) {
    this.currentValue = max
   } else if(val < min) {
    this.currentValue = min
   }
  }else {
   ev.target.value = this.currentValue
  }
 },
 isValueNumber(val) {
  return (/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)|(^-?0{1}$)/).test(val+'')
 }
}

最后是Less部分代码

<style lang="less">
* {
 box-sizing: border-box;
}
.demo {
 width: 200px;
 margin: 0 auto;
}
.input-number {
 width: 100%;
 display: flex;
 height: 40px;
 align-items: center;
 justify-content: space-between;
 .down-btn,.up-btn {
  font-size: 18px;
  width: 40px;
  height: 40px;
  background-color: #f5f7fa;
  color: #606266;
  border: 1px solid #dcdfe6;
  border-radius: 4px 0 0 4px;
  cursor: pointer;
  outline: none;
  &.up-btn {
   border-radius: 0 4px 4px 0;
  }
  &.dis {
   cursor: not-allowed;
  }
 }
 .change-input {
  flex: 1;
  max-width: 100px;
  outline: none;
  border: none;
  text-align: center;
  height: 40px;
 }
}
</style>

总结

以上所述是小编给大家介绍的Vue数字输入框组件示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
URL编码转换,escape() encodeURI() encodeURIComponent()
Dec 27 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
网页实时显示服务器时间和javscript自运行时钟
Jun 09 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
JQuery+CSS实现图片上放置按钮的方法
May 29 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
Jun 26 Javascript
整理Javascript事件响应学习笔记
Dec 02 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
Nov 10 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 Javascript
解决VUE中document.body.scrollTop为0的问题
Sep 15 Javascript
Vue v-bind动态绑定class实例方法
Jan 15 #Javascript
JS 事件机制完整示例分析
Jan 15 #Javascript
JS实现滑动插件
Jan 15 #Javascript
JS实现滑动导航效果
Jan 14 #Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 #Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 #Javascript
JavaScript事件冒泡机制原理实例解析
Jan 14 #Javascript
You might like
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
PHP自定义多进制的方法
2016/11/03 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
Js的MessageBox
2006/12/03 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
javascript整除实现代码
2010/11/23 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
python中split方法用法分析
2015/04/17 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
Python类型转换的魔术方法详解
2020/12/23 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
转让协议书范本
2014/04/15 职场文书
委托书的格式
2014/08/01 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python