基于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 相关文章推荐
JavaScript delete 属性的使用
Oct 08 Javascript
ajax处理php返回json数据的实例代码
Jan 24 Javascript
js调用图片隐藏&amp;显示实现代码
Sep 13 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
Oct 11 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
JS 打印功能代码可实现打印预览、打印设置等
Oct 31 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
详解JavaScript常量定义
Jan 03 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
es6中reduce的基本使用方法
Sep 10 Javascript
微信小程序 导入图标实现过程详解
Oct 11 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正则校验用户名介绍
2008/07/19 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JSON格式化输出
2014/11/10 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
python验证码识别实例代码
2018/02/03 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
经典洗发水广告词
2014/03/13 职场文书
高三毕业寄语
2014/04/10 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
工程款申请报告
2015/05/15 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
2016年暑期社会实践活动总结报告
2016/04/06 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
MySQL 数据库范式化设计理论
2022/04/22 MySQL