常用组件开发:数字输入框

开发一个数字输入框组件
数字输入框是对普通输入框的扩展,用来快捷键入一个标准的数字。

数字输入框

业务需求:数字输入框只能输入数字,而且有两个快捷按钮,可以直接减1或加1。除此之外,还可以设置初始值、最大值、最小值,在数值改变时,触发一个自定义事件来通知父组件。
了解需求以后,定义目录文件:

  • index.html 入口页
  • input-number.js 数字输入框组件
  • index.js 根实例
    index.html:
 


    
    数字输入框组件


    
    

index.js

var app = new Vue({
    el: '#app',
    data: {
        value: 5
    }
});

input-number.js

function isValueNumber (value) {
    return (/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)|(^-?0{1}$)/).test(value+'');
}
Vue.component('input-number', {
    template:'\
        
\ \ \ \
', props: { // 从父组件处传递了以下这些参数 max: { type: Number, default: Infinity }, min: { type: Number, default: -Infinity }, value: { type: Number, default: 0 } }, // Vue组件是单向数据流,所以无法从组件内部直接修改prop value的值。 // 解决办法:给组件声明一个data,默认引用value的值,然后在组件内部维护这个data。 // 完成了初始化时引用父组件value data: function() { return { currentValue: this.value } }, // 监听(watch)选项用来监听某个prop或data的改变,当它们发生变化时,就会触发watch配置的函数。 // 我们需要监听两个量:value和currentValue。 // 监听value是要知晓从父组件修改了value。 // 监听currentValue是为了当currentValue改变时,更新value。 watch: { // 新的值 currentValue: function(val) { this.$emit('input',val); this.$emit('on-change',val); }, // 旧的值 value: function(val) { this.updateValue(val) } }, methods: { handleDown: function(){ if (this.currentValue <= this.min) return; this.currentValue -= 1; }, handleUp: function(){ if (this.currentValue >= this.max) return; this.currentValue += 1; }, updateValue: function(val){ if (val>this.max) val=this.max; if (val max) { this.currentValue = max; } else if (val < min) { this.currentValue = min; } } else { event.target.value = this.currentValue } } }, // 在生命周期mounted钩子里也调用了updateValue()方法。是因为第一次初始化时,也对value进行了过滤。 mouted: function() { this.updateValue(this.value); } });

你可能感兴趣的:(常用组件开发:数字输入框)