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>
Vue Input输入框两侧加减框内数字组件的更多相关文章
- js实现输入框数量加减【转】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android 自定义控件 EditText输入框两边加减按钮Button
自己封装的一个控件:EditText两边放加减按钮Button来控制输入框的数值 Demo 下载地址: 第一版:http://download.csdn.net/detail/zjjne/674086 ...
- 微信小程序优化:实现picker组件中input输入框禁止输入,而只能通过picker组件选择日期
原来的代码如下: <view class="right"> <picker mode="date" value="{{mat ...
- vue input输入框长度限制
今天在开发登录页时,需要设置登录输入框的长度,输入类型为number <input type="number" maxlength="11" placeh ...
- vue input输入框联想
以下是示例,样式可以自己修改.最后是效果图,其实也挺简单的,主要是用了watch监控input输入值的变化,如果数据是请后端请求可以,先请求数据. <template> <div c ...
- input标签获取焦点时文本框内提示信息清空背景颜色发生变化
<input type="text" id="username" onfocus="myFocus(this,'#f4eaf1')" ...
- VUE -input输入框字母转大写
示例: 输入自动转--->大写 <input type="text" placeholder="请输入证件号码" maxlength="1 ...
- vue 如何实现 Input 输入框模糊查询方法
原理:原生js的indexOf() 方法,该方法将从头到尾地检索数组,看它是否含有对应的元素.开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时).如果找到一个 item, ...
- 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)
之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...
随机推荐
- 每天一本电子书 - JavaScript for Kids: A Playful Introduction to Programming
JavaScript for Kids: A Playful Introduction to Programming 作者: Nick Morgan 出版社: No Starch Press 副标题 ...
- 往redis中存储数据是利用pipeline方法
在redis中保存数据时,保存和设置有效时间是分开写的话,如果中间出现的异常,这会导致数据永久有效,因此就可以采用pipeline方法. # 创建redis管道对象,可以一次执行多个语句 pipeli ...
- css常用的可继承属性和不可继承属性
不可继承属性1.display2.text-decoration 添加文本样式3.list-style4.盒子模型属性(如padding系列,border系列,margin等,width,height ...
- python学习3---产生随机数
1.产生随机数 import random #random.random()生成[0.0,1.0)之间的浮点数 print(random.random()) #random.randint(a,b)生 ...
- 当Django中Debug=False,静态文件处理方式。
Django设置DEBUG为False时,'django.contrib.staticfiles'会关闭,即Django不会自动搜索静态文件,静态文件不能加载导致的问题有两个: 1.页面排版不正常,即 ...
- s21day23 python笔记
s21day23 python笔记 一.内容回顾及补充 字符串格式化 %s # 示例一:特别注意:最后的右括号前面必须有逗号(,) msg = '我是%s,年龄%s'%('alex',19,) # 元 ...
- MATLAB 进行五种边缘检测
自定义函数: function []=edge_detect(image_name) a=imread(image_name); I=rgb2gray(a); BW1=edge(I,'Roberts' ...
- 原来你是这样的setTimeout
先上代码 console.log("start"); setTimeout(function(){ console.log("Hello"); },200); ...
- for和for in区别
for ... in 循环中的代买每执行一次,就会对数组的元素或者对象的属性进行一次循环操作. eg:应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”. for (变量 in 对象 ...
- Spring-Cloud-Netflix
Spring Cloud Netflix组件以及部署 (1)Eureka,服务注册和发现,它提供了一个服务注册中心.服务发现的客户端,还有一个方便的查看所有注册的服务的界面. 所有的服务使用Eurek ...