基于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 Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
js写一个字符串转成驼峰的实例
Jun 21 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
js window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
深入理解JavaScript中的箭头函数
Jul 28 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
浅谈React Event实现原理
Sep 20 Javascript
一起来了解一下JavaScript的预编译(小结)
Mar 01 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
咖啡与水的关系
2021/03/03 冲泡冲煮
php中mysql模块部分功能的简单封装
2011/09/30 PHP
php标签云的实现代码
2012/10/10 PHP
PHP数据类型的总结分析
2013/06/13 PHP
解析PHP提交后跳转
2013/06/23 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
js强制把网址设为默认首页
2015/09/29 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
python私有属性和方法实例分析
2015/01/15 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
简单介绍Python中的JSON使用
2015/04/28 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
党员学习十八大感想
2014/01/17 职场文书
《雨点》教学反思
2014/02/12 职场文书
标准毕业生自荐信
2014/06/24 职场文书
售后客服个人自我评价
2014/09/14 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python