基于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/jquery对上传文件格式过滤的方法
Jul 25 Javascript
javascript 文件的同步加载与异步加载实现原理
Dec 13 Javascript
js日期相关函数总结分享
Oct 15 Javascript
浅析JQuery中的html(),text(),val()区别
Sep 01 Javascript
js完美解决IE6不支持position:fixed的bug
Apr 24 Javascript
javascript self对象使用详解
Oct 18 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
JS 中LocalStorage和SessionStorage的使用
Aug 17 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
JavaScript缺少insertAfter解决方案
Jul 03 Javascript
MutationObserver在页面水印实现起到的作用详解
Jul 07 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使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
vue编写简单的购物车功能
2021/01/08 Vue.js
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
python实现下载文件的三种方法
2017/02/09 Python
python实现flappy bird小游戏
2018/12/24 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
Python unittest框架操作实例解析
2020/04/13 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
物理系毕业生自荐书
2014/06/13 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
军训结束新闻稿
2015/07/17 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书