基于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 相关文章推荐
Prototype Hash对象 学习
Jul 19 Javascript
学习ExtJS fit布局使用说明
Oct 08 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
面向对象继承实例(a如何继承b问题)(自写)
Jul 01 Javascript
浅谈javascript的Touch事件
Sep 27 Javascript
jQuery中fadein与fadeout方法用法示例
Sep 16 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
May 29 Javascript
node简单实现一个更改头像功能的示例
Dec 29 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
详解Vue串联过滤器的使用场景
Apr 30 Javascript
利用JavaScript写一个简单计算器
Nov 27 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 Session存储到Redis的方法
2013/11/04 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Pycharm更换python解释器的方法
2018/10/29 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
python中自带的三个装饰器的实现
2019/11/08 Python
使用Python实现批量ping操作方法
2020/05/06 Python
python脚本第一行如何写
2020/08/30 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
综合素质的自我鉴定
2013/10/07 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
体育馆的标语
2014/06/24 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
2019年入党思想汇报
2019/03/25 职场文书