Input Number 数字输入框
仅允许输入标准的数字值,可定义范围
ts
import { createApp } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const app = createApp()
app.use(ElInputNumber)基础用法
TIP
TIP 当输入无效的字符串到输入框时,由于错误,输入值将把 NaN 导入到上层
<template>
<el-input-number v-model="num" :min="1" :max="10" @change="handleChange" />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num = ref(1)
const handleChange = (value: number | undefined) => {
console.log(value)
}
</script>禁用状态
<template>
<el-input-number v-model="num" :disabled="true" />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num = ref(1)
</script>步进
允许定义递增递减的步进控制
<template>
<el-input-number v-model="num" :step="2" />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num = ref(5)
</script>严格步进
<template>
<el-input-number v-model="num" :step="2" step-strictly />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num = ref(2)
</script>精度
TIP
TIP precision 的值必须是一个非负整数,并且不能小于 step 的小数位数。
<template>
<el-input-number v-model="num" :precision="2" :step="0.1" :max="10" />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num = ref(1)
</script>不同的输入框尺寸
使用 size 属性额外配置尺寸,可选的尺寸大小为:large 或 small
<template>
<div class="flex flex-wrap items-center gap-4">
<el-input-number v-model="num1" size="large" />
<el-input-number v-model="num2" />
<el-input-number v-model="num3" size="small" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num1 = ref(1)
const num2 = ref(2)
const num3 = ref(3)
</script>按钮位置
<template>
<div class="flex flex-wrap items-center gap-4">
<el-input-number
v-model="num"
:min="1"
:max="10"
controls-position="right"
size="large"
@change="handleChange"
/>
<el-input-number
v-model="num"
:min="1"
:max="10"
controls-position="right"
@change="handleChange"
/>
<el-input-number
v-model="num"
:min="1"
:max="10"
size="small"
controls-position="right"
@change="handleChange"
/>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber } from '@szhn/dh-design-pc'
const num = ref(1)
const handleChange = (value: number | undefined) => {
console.log(value)
}
</script>自定义图标 (2.6.3)
<template>
<el-space direction="vertical">
<el-space>
<el-input-number v-model="num" />
<el-input-number v-model="num">
<template #decrease-icon>
<el-icon>
<ArrowDown />
</el-icon>
</template>
<template #increase-icon>
<el-icon>
<ArrowUp />
</el-icon>
</template>
</el-input-number>
</el-space>
<el-space>
<el-input-number v-model="num" controls-position="right" />
<el-input-number v-model="num" controls-position="right">
<template #decrease-icon>
<el-icon>
<Minus />
</el-icon>
</template>
<template #increase-icon>
<el-icon>
<Plus />
</el-icon>
</template>
</el-input-number>
</el-space>
</el-space>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { ArrowDown, ArrowUp, Minus, Plus } from '@szhn/dh-design-pc/icons'
import { Icon as ElIcon, InputNumber as ElInputNumber, Space as ElSpace } from '@szhn/dh-design-pc'
const num = ref(1)
</script>带前缀和后缀 (2.8.4)
TIP
TIP 为了确保精度,输入的数值被限制在 Number.MIN_SAFE_INTEGER 到 Number.MAX_SAFE_INTEGER 之间。
<template>
<el-space>
<el-input-number v-model="num" :min="1" :max="10">
<template #prefix>
<span>¥</span>
</template>
</el-input-number>
<el-input-number v-model="num" :min="1" :max="10">
<template #suffix>
<span>RMB</span>
</template>
</el-input-number>
</el-space>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber, Space as ElSpace } from '@szhn/dh-design-pc'
const num = ref(1)
</script>格式化 (2.14.0)
通过 formatter 和 parser 属性来格式化输入框中显示的值。formatter 用于将实际值转换为显示值,parser 用于将显示值转换回实际值。
<template>
<el-space direction="vertical">
<el-input-number
v-model="num1"
:formatter="formatCurrency"
:parser="parseCurrency"
/>
<el-input-number
v-model="num2"
:min="0"
:max="100"
:formatter="formatPercent"
:parser="parsePercent"
/>
</el-space>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { InputNumber as ElInputNumber, Space as ElSpace } from '@szhn/dh-design-pc'
const num1 = ref(1000)
const num2 = ref(50)
const formatCurrency = (value: number | string) =>
`$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
const parseCurrency = (value: string) => value.replace(/\$\s?|(,*)/g, '')
const formatPercent = (value: number | string) => `${value}%`
const parsePercent = (value: string) => value.replace('%', '')
</script>API
Attributes
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| model-value / v-model | 选中项绑定值 | number / null | — |
| min | 设置计数器允许的最小值 | number | Number.MIN_SAFE_INTEGER |
| max | 设置计数器允许的最大值 | number | Number.MAX_SAFE_INTEGER |
| step | 计数器步长 | number | 1 |
| step-strictly | 是否只能输入 step 的倍数 | boolean | false |
| precision | 数值精度 | number | — |
| size | 计数器尺寸 | enum | default |
| readonly 2.2.16 | 原生 readonly 属性,是否只读 | boolean | false |
| disabled | 是否禁用状态 | boolean | false |
| controls | 是否使用控制按钮 | boolean | true |
| controls-position | 控制按钮位置 | enum | — |
| name | 等价于原生 input name 属性 | string | — |
| aria-label a11y 2.7.2 | 等价于原生 input aria-label 属性 | string | — |
| placeholder | 等价于原生 input placeholder 属性 | string | — |
| id | 等价于原生 input id 属性 | string | — |
| value-on-clear 2.2.0 | 当输入框被清空时显示的值 | number / null / enum | — |
| validate-event | 是否触发表单验证 | boolean | true |
| tabindex | input 的 tabindex | string / number | — |
| formatter 2.14.0 | 指定输入框展示值的格式 | Function | — |
| parser 2.14.0 | 指定从格式化器输入中提取的值 | Function | — |
| label a11y deprecated | 等价于原生 input aria-label 属性 | string | — |
| inputmode 2.10.3 | 等价于原生 input inputmode 属性 | string | — |
| align 2.10.5 | 内部输入文本对齐 | enum | 'center' |
| disabled-scientific 2.10.5 | 禁用科学计数法的输入(例如输入 'e') | boolean | false |
Slots
| 插槽名 | 说明 |
|---|---|
| decrease-icon 2.6.3 | 自定义输入框按钮减少图标 |
| increase-icon 2.6.3 | 自定义输入框按钮增加图标 |
| prefix 2.8.4 | 输入框头部内容 |
| suffix 2.8.4 | 输入框尾部内容 |
Events
| 名称 | 说明 | 类型 |
|---|---|---|
| change | 绑定值被改变时触发 | Function |
| blur | 在组件 Input 失去焦点时触发 | Function |
| focus | 在组件 Input 获得焦点时触发 | Function |
Exposes
| 名称 | 详情 | 类型 |
|---|---|---|
| focus | 使 input 组件获得焦点 | Function |
| blur | 使 input 组件失去焦点 | Function |
