基于Vue开发数字输入框组件


Posted in Javascript onDecember 19, 2017

随着 Vue 越来越火热, 相关组件库也非常多啦, 只用轮子怎么够, 还是要造起来!!!

1、概述

Vue组件开发的API:props、events和slots

2、组件代码

github地址:https://github.com/MengFangui/VueInputNumber

效果:

基于Vue开发数字输入框组件

(1)index.html

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <title>数字输入框组件</title>
  </head>
  <body>
    <div id="app">
      <!--数字输入框组件命名为:input-number-->
      <!--数字输入框组件默认值为5,最大值为10,最小值为0-->
      <input-number v-model='value' :max='10' :min='0'></input-number>
    </div>
    <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
    <script src="js/input-number.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
  </body>
</html>

(2)input-number.js

//验证输入值是否为数字
function isValueNumber(value) {
  return(/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9]*$)|(^-?0{1}$)/).test(value + '');
}
Vue.component('input-number', {
  //模板
  template: `
  <div class="input-number">
      <input type="text" :value="currentValue" @change="handleChange" />
    <button @click="handleDown" :disabled="currentValue <= min">-</button>
    <button @click="handleUp" :disabled="currentValue >= max">+</button>
  </div>
  `,
  //props实现与父组件的通信(父组件-->子组件)
  //对每个props进行校验,props的值可以是数组,也可以是对象
  props: {
    max: {
      //必须是数字类型
      type: Number,
      //默认值为Infinity
      default: Infinity
    },
    min: {
      type: Number,
      default: -Infinity
    },
    value: {
      type: Number,
      default: 0
    }
  },
  //Vue组件为单向数据流,声明data来引用父组件的value,在组件内部维护currentValue
  data: function() {
    return {
      currentValue: this.value
    }
  },
  //监听:与父组件通信 (子组件-->父组件)
  watch: {
    currentValue: function(val) {
      //使用v-model改变value 
      //this指向当前组件实例
      this.$emit('input', val)
    }
    //    ,
    //本示例未使用自定义函数,使用了v-mode input函数来更新value
    //    value: function(val) {
    //      //自定义事件on-change,告知父组件数字输入框值有所改变
    //      this.$emit('on-change', val)
    //    }
  },
  methods: {
    //父组件传递过来的值可能不符合条件(大于最大值,小于最小值)
    updateValue: function(val) {
      if(val > this.max) {
        val = this.max;
      }
      if(val < this.min) {
        val = this.min;
      }
      this.currentValue = val;
    },
    handleDown: function() {
      if(this.currentValue <= this.min) {
        return;
      }
      this.currentValue -= 1;
    },
    handleUp: function() {
      if(this.currentValue >= this.max) {
        return;
      }
      this.currentValue += 1;
    },
    handleChange: function(event) {
      var val = event.target.value.trim();
      var max = this.max;
      var min = this.min;
      if(isValueNumber(val)) {
        val = Number(val);
        this.currentValue = val;
        if(val > max) {
          this.current = max;
        }
        if(val < min) {
          this.current = min;
        }
      } else {
        //如果输入的不是数字,将输入的内容重置为之前的currentValue
        event.target.value = this.currentValue;
      }
    }
  },
  //初始化
  mounted: function() {
    this.updateValue(this.value);
  }
})

(3)index.js

var app = new Vue({
  el: '#app',
  data: {
    //数字输入框组件默认值为5(父组件设置初始化值)
    value: 5
  }
})

总结

以上所述是小编给大家介绍的基于Vue开发数字输入框组件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
禁止js文件缓存的代码
Apr 09 Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 Javascript
javascript使用activex控件的代码
Jan 27 Javascript
JavaScript Array Flatten 与递归使用介绍
Oct 30 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
基于vue中解决v-for使用报红并出现警告的问题
Mar 03 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 #jQuery
从setTimeout看js函数执行过程
Dec 19 #Javascript
mongoose更新对象的两种方法示例比较
Dec 19 #Javascript
jquery中done和then的区别(详解)
Dec 19 #jQuery
JavaScript实现AOP详解(面向切面编程,装饰者模式)
Dec 19 #Javascript
利用nginx + node在阿里云部署https的步骤详解
Dec 19 #Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 #Javascript
You might like
php防止SQL注入详解及防范
2013/11/12 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
浅析php工厂模式
2014/11/25 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
学习vue.js计算属性
2016/12/03 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
Python创建xml的方法
2015/03/10 Python
Python使用turtule画五角星的方法
2015/07/09 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
在Python中COM口的调用方法
2019/07/03 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python中if及if-else如何使用
2020/06/02 Python
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
成人教育自我鉴定
2013/11/01 职场文书
大客户销售经理职责
2013/12/04 职场文书
青蓝工程实施方案
2014/03/27 职场文书
师德师风演讲稿
2014/05/05 职场文书
图书室标语
2014/06/21 职场文书
计算机求职信
2014/07/02 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书