shop-wx/doc/wot-design-uni/docs/component/input-number.md

229 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# InputNumber 计数器
由增加按钮、减少按钮和输入框组成,用于在一定范围内输入、调整数字。
## 基本用法
通过 `v-model` 绑定输入值,可以通过 `change` 事件监听到输入值的变化。
```html
<wd-input-number v-model="value" @change="handleChange" />
```
```typescript
const value = ref<number>(1)
function handleChange({ value }) {
console.log(value)
}
```
## 设置步长
设置 `step` 步长即每次value变化的绝对值。
```html
<wd-input-number v-model="value" @change="handleChange" :step="2" />
```
## 设置最小最大值
设置 `min` 最小值,`max` 最大值。`min` 默认为1。
```html
<wd-input-number v-model="value" @change="handleChange" :min="3" :max="10" />
```
## 禁用
设置 `disabled` 属性。
```html
<wd-input-number v-model="value" @change="handleChange" disabled />
```
## 禁用输入框
设置 `disable-input` 属性。
```html
<wd-input-number v-model="value" @change="handleChange" disable-input />
```
## 禁用按钮
可以单独禁用增加或减少按钮。
```html
<!-- 禁用减号按钮 -->
<wd-input-number v-model="value" @change="handleChange" disable-minus />
<!-- 禁用加号按钮 -->
<wd-input-number v-model="value" @change="handleChange" disable-plus />
```
## 无输入框
设置 `without-input` ,不展示输入框。
```html
<wd-input-number v-model="value" @change="handleChange" without-input />
```
## 设置小数精度
设置 `precision` 属性默认为0。
```html
<wd-input-number v-model="value" @change="handleChange" :precision="2" :step="0.1" />
```
## 严格步数倍数
设置 `step-strictly` 属性,强制输入框输入内容为 `step` 的倍数当用户输入完成后触发change时会更正输入框内容
```html
<wd-input-number v-model="value" @change="handleChange" step-strictly :step="2" />
```
## 修改输入框宽度
设置 `input-width` 设置宽度该值接受1个字符串可以是表示尺寸的任何单位。
```html
<wd-input-number v-model="value" @change="handleChange" input-width="70px" />
```
## 允许空值,设置 placeholder
设置 `allow-null` 属性允许空值,设置 `placeholder` 提示填写。
```html
<wd-input-number v-model="value" allow-null placeholder="不限" @change="handleChange" />
```
```typescript
const value = ref<number|string>('')
function handleChange({ value }) {
console.log(value)
}
```
## 非立即更新模式
设置 `immediate-change``false`,输入框内容变化时不会立即触发 `change` 事件,仅在失焦或点击按钮时触发。
```html
<!-- 立即更新模式(默认) -->
<wd-input-number v-model="value1" @change="handleChange" :immediate-change="true" />
<!-- 非立即更新模式 -->
<wd-input-number v-model="value2" @change="handleChange" :immediate-change="false" />
```
```typescript
const value1 = ref<number>(1)
const value2 = ref<number>(1)
function handleChange({ value }) {
console.log(value)
}
```
## 初始化时自动更新
设置 `update-on-init` 属性控制是否在初始化时更新 `v-model` 为修正后的值。
-`update-on-init="true"`(默认)时,会将初始值修正到符合 `min`、`max`、`step`、`precision` 等规则的有效值,并同步更新 `v-model`
-`update-on-init="false"` 时,保持初始值不修正(不改变 `v-model`),但仍会进行显示格式化(如精度处理)
```html
<!-- 自动更新初始值(默认) -->
<wd-input-number v-model="value1" @change="handleChange" :update-on-init="true" :min="3" :max="15" :step="2" step-strictly />
<!-- 不更新初始值,保持原始值 -->
<wd-input-number v-model="value2" @change="handleChange" :update-on-init="false" :min="3" :max="15" :step="2" step-strictly />
```
```typescript
const value1 = ref<number>(1) // 会自动修正为4≥3的最小2的倍数
const value2 = ref<number>(1) // 保持为1不会修正但会格式化显示
function handleChange({ value }) {
console.log(value)
}
```
## 异步变更
通过 `before-change` 可以在输入值变化前进行校验和拦截。
```html
<wd-input-number v-model="value" :before-change="beforeChange" />
```
```typescript
import { ref } from 'vue'
import { useToast } from '@/uni_modules/wot-design-uni'
import type { InputNumberBeforeChange } from '@/uni_modules/wot-design-uni/components/wd-input-number/types'
const { loading, close } = useToast()
const value = ref<number>(1)
const beforeChange: InputNumberBeforeChange = (value) => {
loading({ msg: `正在更新到${value}...` })
return new Promise((resolve) => {
setTimeout(() => {
close()
resolve(true)
}, 500)
})
}
```
## 长按加减
设置 `long-press` 属性,允许长按加减。
```html
<wd-input-number v-model="value" long-press @change="handleChange" />
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| v-model | 绑定值 | number / string | - | - | - |
| min | 最小值 | number | - | 1 | - |
| max | 最大值 | number | - | Infinity | - |
| step | 步数 | number | - | 1 | - |
| step-strictly | 严格值为步数的倍数 | boolean | - | false | - |
| precision | 小数精度 | number | - | 0 | - |
| disabled | 禁用 | boolean | - | false | - |
| without-input | 不显示输入框 | boolean | - | false | - |
| input-width | 输入框宽度 | string | - | 36px | - |
| allow-null | 是否允许输入的值为空,设置为 `true` 后允许传入空字符串 | boolean | - | false | - |
| placeholder | 占位文本 | string | - | - | - |
| disable-input | 禁用输入框 | boolean | - | false | 0.2.14 |
| disable-plus | 禁用增加按钮 | boolean | - | false | 0.2.14 |
| disable-minus | 禁用减少按钮 | boolean | - | false | 0.2.14 |
| adjustPosition | 原生属性,键盘弹起时,是否自动上推页面 | boolean | - | true | 1.3.11 |
| before-change | 输入框值改变前触发,返回 false 会阻止输入框值改变,支持返回 `Promise` | `(value: number \| string) => boolean \| Promise<boolean>` | - | - | 1.6.0 |
| long-press | 是否允许长按进行加减 | boolean | - | false | 1.8.0 |
| immediate-change | 是否立即响应输入变化false 时仅在失焦和按钮点击时更新 | boolean | - | true | 1.10.0 |
| update-on-init | 是否在初始化时更新 v-model 为修正后的值 | boolean | - | true | 1.10.0 |
| input-type | 输入框类型 | string | number / digit | digit | 1.10.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| change | 值修改事件 | ` { value }` | - |
| focus | 输入框获取焦点事件 | ` { value, height }` | - |
| blur | 输入框失去焦点事件 | ` { value }` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |