首页 > 编程 > JavaScript > 正文

基于Vue开发数字输入框组件

2019-11-19 14:41:39
字体:
来源:转载
供稿:网友

随着 Vue 越来越火热, 相关组件库也非常多啦, 只用轮子怎么够, 还是要造起来!!!

1、概述

Vue组件开发的API:props、events和slots

2、组件代码

github地址:https://github.com/MengFangui/VueInputNumber

效果:

(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开发数字输入框组件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表