返回

Element-UI 源码解析之 inputNumber

前端

在 Element-UI 中,inputNumber 是一个用于数字输入的组件,它提供了丰富的功能,包括:

  • 支持各种数字格式,如整数、小数、百分比等
  • 支持步进操作,可以快速调整数字
  • 支持最大值和最小值限制,防止输入超出范围
  • 支持各种输入验证规则,确保输入的数字符合要求

基本使用方法

要使用 inputNumber,需要先在项目中安装 Element-UI,然后在组件中导入 inputNumber 组件。

import { InputNumber } from 'element-ui'

export default {
  components: { InputNumber }
}

接下来,就可以在组件中使用 inputNumber 组件了。

<template>
  <el-input-number v-model="value" />
</template>

<script>
export default {
  data() {
    return {
      value: 0
    }
  }
}

属性

inputNumber 组件提供了丰富的属性,可以满足各种不同的需求。

属性 类型 默认值
v-model Number - 绑定 inputNumber 的值
step Number 1 步进值,每次点击向上或向下按钮时,值的变化量
max Number - 最大值,如果输入的值大于 max,则会自动纠正为 max
min Number - 最小值,如果输入的值小于 min,则会自动纠正为 min
precision Number - 小数点后的位数,如果值为 -1,则表示不限制小数点后的位数
step-strictly Boolean false 是否严格限制步进值,如果为 true,则只能通过点击向上或向下按钮来改变值,不能直接输入
disabled Boolean false 是否禁用 inputNumber
readonly Boolean false 是否只读
controls Boolean true 是否显示向上和向下按钮
size String medium 输入框的大小,可选值有 small、medium、large
placeholder String - 输入框的占位符
label String - 输入框的标签
autofocus Boolean false 是否自动聚焦

事件

inputNumber 组件提供了以下事件:

事件 参数
change value 值改变时触发
focus - 获得焦点时触发
blur - 失去焦点时触发

源码分析

inputNumber 组件的源码位于 Element-UI 的官方 GitHub 仓库中。其核心代码如下:

export default {
  name: 'ElInputNumber',
  componentName: 'ElInputNumber',

  mixins: [
    mixins.emitter
  ],

  inject: {
    elForm: {
      default: ''
    },
    elFormItem: {
      default: ''
    }
  },

  data() {
    return {
      currentValue: 0,
      userInput: null
    }
  },

  computed: {
    min() {
      return this.$attrs.min || this.minLimit
    },
    max() {
      return this.$attrs.max || this.maxLimit
    },
    step() {
      return this.$attrs.step || this.stepLimit
    },
    value() {
      return this.currentValue
    },
    size() {
      return this.$attrs.size || this.elFormItem.size || 'default'
    },
    disabled() {
      return this.$attrs.disabled || this.elFormItem.disabled
    },
    readonly() {
      return this.$attrs.readonly || this.elFormItem.readonly
    },
    precision() {
      return this.$attrs.precision || this.elFormItem.precision
    }
  },

  watch: {
    value(val) {
      this.setCurrentValue(val)
    },
    currentValue(val) {
      this.$emit('input', val)
      this.userInput = null
    }
  },

  methods: {
    // ...
  },

  render(h) {
    // ...
  }
}

通过对源码的分析,我们可以了解到 inputNumber 组件是如何工作的。