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 相关文章推荐
Maps Javascript
Jan 22 Javascript
jquery text()要注意啦
Oct 30 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
自定义jQuery选项卡插件实例
Mar 27 Javascript
浅析tr的隐藏和显示问题
Mar 05 Javascript
js动态修改整个页面样式达到换肤效果
May 23 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
详解小程序循环require之坑
Mar 08 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
JS实现百度搜索框关键字推荐
Feb 17 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
apache php模块整合操作指南
2012/11/16 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
JS跨域代码片段
2012/08/30 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
Python 常用string函数详解
2016/05/30 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
python实现两张图片的像素融合
2019/02/23 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
党校培训思想汇报
2013/12/30 职场文书
档案信息化建设方案
2014/05/16 职场文书
婚庆答谢词
2015/01/04 职场文书
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript