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 相关文章推荐
jquery uaMatch源代码
Feb 14 Javascript
iphone safari不支持position fixed的解决方法
May 04 Javascript
javascript中2个感叹号的用法实例详解
Sep 04 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
微信小程序 实现拖拽事件监听实例详解
Nov 16 Javascript
微信小程序自定义prompt组件步骤详解
Jun 12 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
Sep 20 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
Javascript ParentNode和ChildNode接口原理解析
Mar 16 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 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
德生S2000电路分析
2021/03/02 无线电
深入file_get_contents与curl函数的详解
2013/06/25 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PDO::errorCode讲解
2019/01/28 PHP
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python 如何展开嵌套的序列
2020/08/01 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
C#笔试题和英文面试题
2013/02/07 面试题
数控专业大学生的自我鉴定
2013/11/13 职场文书
文体活动实施方案
2014/03/27 职场文书
授权委托书范文
2014/07/31 职场文书
结婚老公保证书
2015/02/26 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技
关于Redis的主从复制及哨兵问题
2022/06/16 Redis