Skip to content

Parts ​

概述 ​

Parts分段字符输入组件,按模板将输入拆分为多个单字符输入格,段间渲染分隔符,常用于验证码、序列号、授权码等固定格式的输入场景。

示例 ​

声明分段输入字段只需指定widget: 'parts',默认模板为 4 个输入格:

ts
const form = document.querySelector('#form');
form.state = {
    mailcode: configurable('1234', {
        label: '邮件验证码',
        widget: 'parts',
    }),
};
loading

指南 ​

基础用法 ​

每个输入格只接受一个字符,输入后自动跳到下一格,聚焦时自动全选:

ts
form.state = {
    code: configurable('', {
        label: '验证码',
        widget: 'parts',
    }),
};

模板与分隔符 ​

template指定分段模板,每个占位字符对应一个输入格,delimiter中的字符原样渲染为分隔符:

ts
form.state = {
    code: configurable('AB-CD-000', {
        label: '授权码',
        widget: 'parts',
        delimiter: '-', 
        template: '00-00-000', 
    }),
};

delimiter可以包含多个分隔符字符,模板中出现这些字符的位置都会渲染为分隔符:

ts
form.state = {
    code: configurable('ab#123', {
        label: '授权码',
        widget: 'parts',
        delimiter: '-#', 
        template: '00#00-000', 
    }),
};

includeDelimiter控制状态值中是否包含分隔符,false时结果中移除分隔符:

ts
form.state = {
    code: configurable('abcdefg', {
        label: '授权码',
        widget: 'parts',
        delimiter: '-#',
        template: '00#00-000',
        includeDelimiter: false, // 状态值为 "abcde...",不含 # -
    }),
};

输入字符限制 ​

chars以正则约束允许输入的字符,如[0-9]只允许输入数字:

ts
form.state = {
    code: configurable('0000000', {
        label: '数字序列号',
        widget: 'parts',
        delimiter: '-#',
        template: '00#00-000',
        chars: '[0-9]', 
    }),
};

大小写 ​

caseType约束输入字符的大小写,可选upper/lower/both:

ts
form.state = {
    code: configurable('', {
        label: '大写授权码',
        widget: 'parts',
        delimiter: '-',
        template: '00-00-000',
        caseType: 'upper', 
    }),
};

属性 ​

属性 类型 默认值 说明
template string "0000" 分段模板,每个占位字符一段,如"00-00-000"
delimiter string "" 段连接符,可包含多个分隔符字符
caseType string "both" 输入字符大小写约束,可选upper/lower/both
includeDelimiter boolean true 状态值是否包含分隔符,false时移除
chars string 允许输入字符的正则,如"[0-9]"

注意事项 ​

  • 支持直接粘贴到输入框的内容,会按分隔符自动分割到各输入格。
  • template中的占位字符仅表示一个输入格,字符本身无含义;分隔符位置由delimiter决定。