基于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 相关文章推荐
jQuery中add实现同时选择两个id对象
Oct 22 Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
js对象基础实例分析
Jan 13 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
Aug 31 Javascript
jQuery 调用WebService 实例讲解
Jun 28 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
IntersectionObserver API 详解篇
Dec 11 Javascript
Vue2.0使用过程常见的一些问题总结学习
Apr 10 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
Sep 04 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 字符串函数收集
2010/03/29 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
Python获取脚本所在目录的正确方法
2014/04/15 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
基于python实现删除指定文件类型
2020/07/21 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
请假条的格式
2014/04/11 职场文书
网页美工求职信范文
2014/04/17 职场文书
省文明单位申报材料
2014/05/08 职场文书
养成教育经验材料
2014/05/26 职场文书
三方协议书
2015/01/27 职场文书
司机岗位职责
2015/02/04 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
航班延误投诉信
2015/07/02 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
详解Vue的options
2021/05/15 Vue.js