Skip to content

多选器

@astryxdesign/core v0.7.1 · MultiSelector

使用方法 ​

MultiSelector 从固定列表里选多项。触发器在没有搜索框时是 combobox,列表是 aria-multiselectable 的 listbox。选中一项不会关闭列表。

选项可以是字符串、带说明的对象、分隔线,或带标题的分组。selectAll 在列表顶部加一行全选,禁用项不会被全选带上。searchable 会在列表里显示搜索框,只过滤当前列表,不请求远程数据。

triggerDisplay 决定关闭后怎么展示已选项:count 显示「已选 N 项」,labels 拼接文字,badges 用标签。maxBadges 限制露出的个数,放不下时末尾显示 +N。宽度更窄时还会再收一次。

只读时已选值还在,可以聚焦并提交,但打不开列表,也没有清除和展开箭头,外观不会变暗。加载时触发器显示旋转指示,这时不提供创建行,也不说没有选项。disabledMessage 用来解释为什么禁用:悬停和键盘聚焦时弹出提示,触发器靠 aria-disabled 保持可聚焦,菜单仍然打不开。

关闭后的文字可以用函数改写,只对数量和标签两种展示生效,标签模式会忽略它。没有任何选中项时不调用,继续显示占位符。

和搜索一起打开创建后,输入的文字和任何选项标签都不相同(忽略大小写)时,列表第一行是创建。选中后,变更事件会多带一段描述,里面是创建和当时的文字。调用方要在同一次更新里把这个选项加进列表。没有搜索时不会出现创建行。

从外面开关列表时,在脚本里把句柄对象本身传进去。模板会把 ref 自动拆开,所以模板里要传一个接收句柄的函数。只读和禁用时,打开不会生效。

方向键移动高亮项,Enter 和空格切换选中。搜索框里的空格仍用于输入。没有高亮项时,Enter 会创建当前文字。Escape 关闭列表。关闭且没有在搜索时,Backspace 清空已选项。

解剖

部分说明
字段提供标签和可选辅助内容的独立 Field 外壳。放在 InputGroup 里时不画这一层。
触发器着色控件,显示当前选择或占位。可编辑时打开选择表面。
图标渲染的起始图标可选的前导语义图标或图标组件,通过 Icon 绘制。
使用方渲染的起始内容直接画在触发器开头的可选任意插槽内容。
触发器清除按钮共用的清除操作。clearable 打开时,一次去掉所有已选值。
状态图标状态以附着或提示方式呈现时,用来代替展开指示的状态符号。
指示图标状态呈现没有把它换掉时显示的尾部箭头,反映收起或展开。
搜索行面板头部,带无边框搜索框和可选的清除操作。
搜索图标搜索行里通过 Icon 画出的前导放大镜。
搜索清除按钮已经有查询词时,搜索行里的共用清除操作。
选项行一个选项,或可选的全选,所在的可选择行。
选项复选指示CheckboxInput 指示,呈现每一行的已选、未选或不确定。
选项分隔线公开选项数据里用来分开相邻选项组的分隔线。
分区标题一组带标签的选项行的可见标题。
空状态共用面板里没有选项,或搜索没有匹配时的消息。
指针弹层浮层呈现方式里,承载共用面板内容的锚定着色表面。
触摸面板标题底部面板呈现方式里,共用面板内容上方的标题。
触摸面板底部面板呈现方式里,承载同一套面板内容的 BottomSheet 表面。

最佳实践 ​

指引实践
推荐选项不多、用户需要对照着勾选时用多选器。
推荐已选项要在触发器里认出来时,用 badges 并加上 +N。
避免用多选器搜索远程数据。那种场景用标签输入框。

示例 ​

底部弹层

Teams

在底部弹层里勾选,列表保持打开。

列可见性

隐藏标签,可搜索、可全选,触发器显示已选数量。

表单组合

Choose which columns to display in the table
Filter by status
Ask an administrator to change the saved view

表单里两个多选器,分别标成必填和可选,另有一个禁用的在悬停或键盘聚焦时说明原因。

幽灵工具栏

Some filters hide archived rows

无边框变体,和幽灵按钮排在同一条工具栏里。

可搜索

可搜索,并带全选。

分组权限

选项按标题分成几组。

创建和只读

只读

输入现有列表里没有的名字可以创建。关闭后的文字可以改成自己的句子。只读保留已选值。