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 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
firefox插件Firebug的使用教程
Jan 02 Javascript
用Javascript评估用户输入密码的强度实现代码
Nov 30 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
jQuery验证元素是否为空的两种常用方法
Mar 17 Javascript
javascript断点调试心得分享
Apr 23 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
JS字符串按逗号和回车分隔的方法
Apr 25 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
基于require.js的使用(实例讲解)
Sep 07 Javascript
详解Node.JS模块 process
Aug 31 Javascript
vue选项卡切换的实现案例
Apr 11 Vue.js
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
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
CI框架中zip类应用示例
2014/06/17 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
js截取小数点后几位的写法
2013/11/14 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python列表list数组array用法实例解析
2014/10/28 Python
详解Python中for循环是如何工作的
2017/06/30 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
大专生自我鉴定范文
2013/10/01 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
安装工程师岗位职责
2015/02/13 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书