vue自定义数字输入框组件

 更新时间:2022年06月09日 15:53:53   作者:小雷雷哥哥  
这篇文章主要为大家详细介绍了vue自定义数字输入框组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近自己在练习组件开发,做了一个简单的数字输入框加减的组件,效果图如下:

组件可以传入三个参数,value是初始化值,max是可输入的最大值,min是可输入最小值,当然参数可以按需求继续扩展的。

组件代码如下:

<template>
    <div style="text-align: center;margin-top: 20px;">
        <input type="text" v-model="currentValue" @change="handleChange">
        <button @click="handleUp" :disabled="currentValue >= max">+</button>
        <button @click="handleDown" :disabled="currentValue <= min">-</button>
    </div>
</template>
 
<script>
    export default {
        props:['max','min','value'],
        name: "MyInput",
        data(){
            return {
                currentValue:this.value
            }
        },
        watch:{
            currentValue: function (val) { //currentValue值变动就向父组件传值
                this.$emit('input',val);
                this.$emit('on-change',val);
            },
            value:function (val) { //对值进行验证
                this.updataValue(val);
            }
        },
        mounted(){
            this.updataValue(this.value);
        },
        methods:{
            handleDown: function () {  //加法
                if(this.currentValue <= this.min){
                    return;
                }else{
                    this.currentValue -= 1;
                }
            },
            handleUp: function () { //减法
                if(this.currentValue >= this.max){
                    return;
                }else{
                    this.currentValue += 1;
                }
            },
            updataValue: function (val) {
                if(val > this.max){val = this.max}
                if(val < this.min){val = this.min}
                this.currentValue = val;
 
            },
            handleChange: function (event) {  //对值进行验证
                var val = event.target.value.trim();
                var max = this.max;
                var min = this.min;
                if(this.isNumber(val)){
                    val = Number(val);
                    this.currentValue = val;
                    if(val > max){
                        this.currentValue = max;
                    }else if(val < min){
                        this.currentValue = min;
                    }
                }else{
                    this.currentValue = 0;
                }
            },
            isNumber: function (value) {
                return (/^\-?[0-9]+$/).test(value + '');
            }
        }
    }
</script>
 
<style scoped>
    input{
        width: 280px;
        height: 36px;
        padding: 0 10px;
        border: 1px solid #ccc;
        border-radius: 4px;
    }
    button{
        border: none;
        background: #4e83e4;
        color: #fff;
        height: 36px;
        width: 36px;
    }
</style>

调用组件就很简单了,如下:

<template>
    <div>
        <h2>数字输入框组件</h2>
        <!--  max是可输入的最大值  min是可输入的最小值  value是初始值-->
        <my-input v-model="value" :max="10" :min="-5"></my-input>
        <p style="text-align: center;"><button @click="doAlert(value)">输入框的值是</button></p>
    </div>
</template>
 
<script>
    import MyInput from '../components/MyInput.vue';
    export default {
        name: "computeNumber",
        components:{MyInput},
        data(){
            return {
                value: 1
            }
        },
        methods:{
            doAlert: function (val) {
                alert(val);
            }
        }
    }
</script>

组件做的很简单,欢迎大家一起交流。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 带你理解vue中的v-bind

    带你理解vue中的v-bind

    如果你写过vue,对v-bind这个指令一定不陌生。 下面小编将从源码层面去带大家剖析一下v-bind背后的原理,需要的小伙伴可以参考下面章的具体内容
    2021-09-09
  • 详解vue为什么要求组件模板只能有一个根元素

    详解vue为什么要求组件模板只能有一个根元素

    这篇文章主要介绍了vue为什么要求组件模板只能有一个根元素,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-07-07
  • vue发送ajax请求详解

    vue发送ajax请求详解

    如何利用vue进行AJAX,其它vue本身不支持发送AJAX请求,需要使用vue-resource(vue1.0版本)或axios(vue2.0版本)第三方插件的支持才行
    2018-10-10
  • vue跳转后不记录历史记录的问题

    vue跳转后不记录历史记录的问题

    这篇文章主要介绍了vue跳转后不记录历史记录的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue实现拖拽或点击上传图片

    vue实现拖拽或点击上传图片

    这篇文章主要为大家详细介绍了vue实现拖拽或点击上传图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue3组件销毁的具体实现

    vue3组件销毁的具体实现

    组件的销毁意味着从 DOM 中移除该组件,并清除与之相关的所有事件监听器和子组件,本文主要介绍了vue3组件销毁的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据

    vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据

    这篇文章主要介绍了vue+vuex+axio从后台获取数据存入vuex,组件之间共享数据,非常具有实用价值,需要的朋友可以参考下
    2017-04-04
  • vue3项目+element-plus:时间选择器格式化方式

    vue3项目+element-plus:时间选择器格式化方式

    这篇文章主要介绍了vue3项目+element-plus:时间选择器格式化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue页面params传值的坑及解决

    vue页面params传值的坑及解决

    这篇文章主要介绍了vue页面params传值的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Javascript结合Vue实现对任意迷宫图片的自动寻路

    Javascript结合Vue实现对任意迷宫图片的自动寻路

    本文将结合实例代码介绍Javascript结合Vue实现对任意迷宫图片的自动寻路,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论