【发布时间】:2020-02-02 17:44:39
【问题描述】:
我正在使用 Vue.js,并且想创建一个只接受正整数的输入字段组件(0 也可以)。我想避免使用正则表达式来保持人类可读:)
我的消费父组件传入当前值并使用速记同步指令
<template>
<div>
<form>
<positive-integer-input :value.sync="currentValue" />
</form>
</div>
</template>
<script>
import PositiveIntegerInput from "../components/PositiveIntegerInput.vue";
export default {
components: {
"positive-integer-input": PositiveIntegerInput
},
data() {
return {
currentValue: 0
};
}
};
</script>
输入组件本身只是一个基本的文本输入(为了更好的 CSS 样式)
<template>
<input :id="_uid" type="text" :value="value" @input="onInput" />
</template>
<script>
export default {
props: {
value: {
type: Number,
required: true
}
},
methods: {
onInput({ data }) {
const inputNumber = Number(data);
if (!Number.isInteger(inputNumber) || inputNumber < 0) {
const input = document.getElementById(this._uid);
input.value = this.value;
} else {
this.$emit("update:value", inputNumber);
}
}
}
};
</script>
每当输入发生变化时,我都会验证输入输入是否为正整数。如果验证失败,我想重置当前输入字段内容(也许有更用户友好的解决方案?)
输入字段本身只需要一个数字或多个相同的数字。所以只有这些是可能的:
- 3
- 4
- 333333
- 4444
但不是:
- 34
有人知道如何修复组件吗?
提前致谢
【问题讨论】:
-
控制台有错误吗?
-
@question3r,我已经更新了我的答案。你能查到吗?
-
不太清楚你在问什么。您想要的行为的哪些方面目前不起作用?您是否在问如何添加确保所有数字相同的条件?如果是这样,0 附近的期望值是多少?排除使用 RegExp 似乎有点武断。正确使用 RegExp 比其他方法更容易阅读。
-
@Nipun Jain 没有错误
-
@webprogrammer 我会在你的答案下面回答
标签: javascript html vue.js