这篇文章主要为大家详细介绍了说说如何在Vue.js中实现数字输入组件的方法,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!
我们对普通输入框进行扩展,实现一个可快捷输入数字组件。
首先制定规则:
接着,规划好 API。一个 Vue.js 组件最重要的 3 个部分就是 props、events 以及 slot,我们需要定义这三个部分的命名以及业务规则。这个组件比较简单,所以我们只用到 props 与 events。
html:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数字输入组件</title>
</head>
<body>
<div id="app">
<number-input v-model="value" :min="0" :max="6"></number-input>
</div>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
<script src="number.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
value: 3
}
});
</script>
</body>
</html>
这里,我们使用了 v-model,双向绑定了 value。
number.js:
代码如下:
/**
* 是否为数字
* @param val
* @returns {boolean}
*/
function isNum(val) {
return (/^[0-9]*$/).test(val);
}
/**
* 数字输入组件
*/
Vue.component('number-input', {
template: '\
<div class="number-input">\
<input \
type="text"\
:value="currentVal"\
@change="change">\
<button\
@click="down"\
:disabled="currentVal<=min">-</button>\
<button\
@click="up"\
:disabled="currentVal >=max">+</button>\
</div>',
props: {//校验
//最大值
max: {
type: Number,
default: Infinity
},
//最小值
min: {
type: Number,
default: -Infinity
},
//初始值
value: {
type: Number,
default: 0
}
},
data: function () {
return {
currentVal: this.value
}
},
watch: {
currentVal: function (val) {
console.log("currentVal:" + this.currentVal);
this.$emit('input',val);
},
value: function (val) {//更新 currentVal
this.update(val);
}
},
methods: {
/**
* 更新
* @param val
*/
update: function (val) {
//让输入的值在限定范围内
if (val > this.max) {
val = this.max;
}
if (val < this.min) {
val = this.min
}
this.currentVal = val;
},
/**
* 减少
*/
down: function () {
if (this.currentVal <= this.min) {
return;
}
this.currentVal -= 1;
},
/**
* 增长
*/
up: function () {
if (this.currentVal >= this.max) {
return;
}
this.currentVal += 1;
},
/**
* 如果输入的值,
* @param event
*/
change: function (event) {
var val = event.target.value.trim();//获取输入值
if (isNum(val)) {//赋值 currentVal
val = Number(val);
this.currentVal = val;
//超出限定范围时,规整
var max = this.max;
var min = this.min;
if (val > max) {
this.currentVal = max;
} else if (val < min) {
this.currentVal = min;
}
} else {//还原为 currentVal
event.target.value = this.currentVal;
}
}
},
mounted: function () {
//对初始值进行范围限定
this.update(this.value);
}
});
这里,我们专门定义了一个 number.js,用于定义数字输入组件。
在 number.js 中,我们做了如下工作:
效果:
【图片暂缺】
2 按键支持
当输入框获得焦点时,按下“向上键”时,增长;按下“向上键”时,减少。
这可以利用按键修饰符来实现,我们修改示例中的组件模板:
代码如下:
...
<input
type="text"
:value="currentVal"
@change="change"
@keyup.up="up"
@keyup.down="down">
...
Vue.js 定义按键别名有这些:
效果:
【图片暂缺】
新增一个步伐属性,增长或者减少以步伐值为变化量。之前的示例,步伐为 1。
首先在 props 中,定义一个步伐属性:
代码如下:
//步伐
step: {
type: Number,
default: 1
}
然后在增长与减少函数中,使用步伐属性做为变化量:
代码如下:
/**
* 减少
*/
down: function () {
if (this.currentVal <= this.min) {
return;
}
this.currentVal -= this.step;
},
/**
* 增长
*/
up: function () {
if (this.currentVal >= this.max) {
return;
}
this.currentVal += this.step;
},
最后为组件重新配置参数:
代码如下:
<number-input v-model="value" :min="0" :max="50" :step="5"></number-input>
效果:
【图片暂缺】
本文示例代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持四海网。
本文来自:http://www.q1010.com/184/7068-0.html
注:关于说说如何在Vue.js中实现数字输入组件的方法的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。
关键词:vue.js
四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。