Vue Input输入框两侧加减框内数字组件

NumberBox组件内容:

<template>
    <div class="number-box" :class="{‘box-disable‘: isDisabled}">
        <!-- 此处为“减号”标志的图片 -->
        <img class="btn-number" src="./reduce.png" @click="onReduce" />
        <div class="number-container">
            <Input v-model="strVal" @on-enter="onEnter" :disabled="isDisabled" @on-blur="onBlur" placeholeder="请输入范围" />
            <div class="unit" v-text="米" />
        </div>
        <img class="btn-number" src="./recrease.png" @click="onIncrease" />
    </div>
</template>

<script>
    export default {
        props: {
            isDisabled: {
                type: Boolean,
                default: false
            },
            curVal: {
                type: Number,
                default: 50
            },
            minVal: {
                type: Number,
                default: 50
            },
            maxVal: {
                type: Number,
                default: 1000
            }
        },
        data() {
            return {
                numVal: this.curVal,
                strVal: this.curVal.toString()
            }
        },
        methods: {
            onEnter() {
                if(Number(this.strVal) <= this.minVal) {
                    this.strVal = this.minVal.toString();
                    this.numVal = this.minVal;
                }
                if(Number(this.strVal) >= this.maxVal) {
                    this.strVal = this.maxVal.toString();
                    this.numVal = this.maxVal;
                }

                this.numVal = Number(this.strVal);
                this.$emit("getNumber", this.numVal);
            },
            onBlur() {
                this.nextTick(() => {
                    this.onEnter();
                });
            },
             onReduce() {
                if(Number(this.strVal) > this.minVal) {
                    this.strVal = Number(this.strVal);
                    this.numVal -= 1;
                    this.strVal = this.numVal.toString();
                    this.$emit("getNumber", this.numVal);
                }
            },
            onIncrease() {
                if(Number(this.strVal) < this.maxVal) {
                    this.strVal = Number(this.strVal);
                    this.numVal += 1;
                    this.strVal = this.numVal.toString();
                    this.$emit("getNumber", this.numVal);
                }
            },
            resetCurVal(val) {
                this.strVal = val.toString();
                this.numVal = val;
                this.$emit("getNumber", this.numVal);
            }
        }
    }
</script>

<style lang="less" scoped>
    /*数字输入框*/
    .box-disable {
        pointer-events: none;
        color: #686868 !important;
    }
    .number-box {
        color: #FFF;
        dispaly: felx;
        flex-flow: row nowrap;
        justify-content: space-between;
        .btn-number {
            cursor: pointer;
            margin-top: 7px;
            width: 15px;
            height: 15px;
        }
        .number-container {
            display: flex;
            flex-flow: row nowrap;
            justify-content: space-between;
            flex-grow: 1;
            margin: 0 10px;
            background: #1F2124;
            .unit {
                position: absolute;
                right: 35px;
            }
        }
    }
</style>

以下为引用number-box.vue组件的index.vue内容:

<template>
    <div class="main-container">
        <div class="" @click="onBackOff">
        </div>
        <number-box ref="numRange" :curVal="currentVal" :minVal="50" :maxVal=“1000” @getNumber="getNumber" />
    </div>
</template>
<script>
    export default {
        data() {
            return {
                currentVal: 30
            }
        },
        methods: {
            onBackOff() {    //重置子组件输入框中的内容
                this.$refs.numRange.resetCurVal(50);
            },
            getNumber(val) {
                console.log("This is value of input ", val);
            }
        }
    }
</script>

原文地址:https://www.cnblogs.com/minozMin/p/9856279.html

时间: 2024-08-23 01:22:53

Vue Input输入框两侧加减框内数字组件的相关文章

Vue -- input输入框支持可远程搜索

一.功能展示: 二.代码: 1.template中 html <template> <el-form-item label="公司名称:" prop="keyword" label-width="120px"> <el-autocomplete v-model="keyword" :fetch-suggestions="querySearchAsync" @select=&qu

vue.js 实现购物车加减方法

<template> <div class="coutter-wrapper"> <button type="button" @click="plus">+</button> <button type="button">{{ result }}</button> <button type="button" @click="

vue input输入框联想

以下是示例,样式可以自己修改.最后是效果图,其实也挺简单的,主要是用了watch监控input输入值的变化,如果数据是请后端请求可以,先请求数据. <template> <div class="binding" v-title data-title="绑定账号"> <div class="bindingbtn"> <input type="text"v-model="city

input标签获取焦点时文本框内提示信息清空背景颜色发生变化

<input type="text" id="username" onfocus="myFocus(this,'#f4eaf1')" onblur="myblur(this,'#ffffff')" value="请输入姓名"/> function myFocus(obj,color){    if(obj.value == "请输入姓名"){        obj.value

Vue实现购物车库存加减

<template> <div> <!-- 数据列表 --> <div class="lines" v-for="(item,index) in info" :key="index"> <div class="img"> <img :src="item.goods_img" class="imgs"> </di

vue 如何实现 Input 输入框模糊查询方法

原理:原生js的indexOf() 方法,该方法将从头到尾地检索数组,看它是否含有对应的元素.开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时).如果找到一个 item,则返回 item 的第一次出现的位置.开始位置的索引为 0. 如果在数组中没找到指定元素则返回 -1. 下面先看示例: 搜索前: 搜索后: 实现方法: 1 methods:{ 2 // 点击搜索工程 3 search(){ 4 // 支持模糊查询 5 // this.xmgcqkJsonsData:

自定义数字加减控件

1_自定义数字加减控件的要求 创建Module -NumberAddSubView A_输入的只能是数字,而且不能通过键盘输入 B_通过加减按钮操作数字 C_监听加减按钮 D_数组有最小值和最大值的限制 E_自定义属性 2.提供接口,让外界监听到数字的变化 1_设置接口 @Override public void onClick(View v) { if (v.getId() == R.id.btn_sub) { //Toast.makeText(mContext,"减",Toast.

如何让input number类型的标签不产生上下加减的按钮

之前用 input type="number" 来放数字框,发现有个上下加减的东西,感觉不太好 这个容易出现0 然后减为负数 这种情况下怎么去掉右边的那个上下加减的小按钮呢?前端同事告诉我加一点css就行了 <style> input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none !important; margin: 0; } </sty

vue入门------简单购物车功能实现(全选,数量加减,价格加减)

简易购物车功能(无任何布局 主要是功能) 数量的加减 商品的总价钱 全选与全不选 删除(全选.价格 受影响) <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <div id="box"> 全选:<input type="checkbox" @click="handleAllChecked($event)&q