Skip to content

Cascader 级联选择 ​

多级联动选择:支持多选勾选、父子解绑、多选值策略、路径搜索、动态加载、受控开合与标签折叠,键盘可操作。

基础用法 ​

基础用法

点击展开多级面板,逐级下钻直到叶子节点提交。

选择即提交 ​

选择即提交(change-on-select)

开启 change-on-select 后,点击任意层级的选项(含含子级的节点)即提交当前路径。

预设路径 ​

预设值(value 路径数组)

value 为 JSON 数组,存放各级选中值;展示时拼接为「浙江 / 杭州」。

多选 ​

多选(multiple)

多选时 value 为路径数组的数组(JSON),面板行前置复选框:勾选父级会级联勾选全部子级,部分勾选时父级呈半选态;触发器以标签回显,可单独移除。勾选后面板保持展开,便于连续选择。

父子解绑 ​

父子解绑(check-strictly)

check-strictly 下父子勾选互不联动:勾选父级只提交父级路径,值即勾选集合(此时 value-mode 不生效)。

多选值策略 ​

值策略(value-mode)

value-mode 决定多选时提交哪些路径:all(默认)= 全部勾选节点(子级全选时父级自动进值,与单选全路径心智一致);parentFirst = 子级全选时收敛为父级代表;onlyLeaf = 只保留叶子路径。回显标签与 value 字面一致(宿主预设不被动改写),交互提交时按各自策略收敛。

可搜索 ​

可搜索(filterable)

filterable 打开面板后出现搜索框,输入按「路径各级名称拼接」匹配,结果为扁平路径列表,点击直接选中该完整路径(多选则勾选);输入时派发 oas-search。可通过 el.filter = (query, path) => boolean 自定义匹配(path 为各级选项数组)。

动态加载 ​

动态加载(lazy + el.load)

设置 el.load = ({ option, path, depth }) => Promise<选项数组> 后,展开未加载的节点会显示「加载中」并请求子级(path 为根时 option 为 null,即第一级也可懒加载);选项可标 isLeaf: true 声明叶子。本例模拟 500ms 网络延迟。

悬停展开 ​

悬停展开(expand-trigger=hover)

expand-trigger="hover" 时悬停父级选项(约 120ms 防误触延时)即展开子级列,点击叶子提交;默认为 click。

大数据量(虚拟滚动) ​

虚拟滚动(1000 项长列)

设置 virtual 后超过阈值(50 项)的长列只渲染可视窗口(复用 oas-virtual-list 的窗口计算,首尾 padding 撑起滚动高度),千级选项滚动流畅、面板高度恒定;item-height 可调定高(默认 36)。键盘 ↑/↓ 导航时窗口自动跟随高亮行;低于阈值的短列与搜索结果、加载占位保持普通渲染。

仅末级与自定义分隔符 ​

仅末级(show-all-levels)与分隔符(separator)

show-all-levels 默认 true(显示完整路径),设为 false 后触发器只显示末级名称;separator 自定义路径分隔符(默认 /),同时作用于搜索结果行。

可清空 ​

可清空(clearable)

有选中值时显示清空按钮,点击清空并派发 oas-clear(detail 为清空前的值)与 oas-change(空值)。

标签折叠 ​

标签折叠(max-tag-count)

多选标签默认换行展示;显式设置 max-tag-count 后按数量折叠为 +N(悬浮列出被折叠项),与 oas-select 约定一致。

尺寸与校验态 ​

尺寸(size)

校验态(status)

size 支持 small / medium / large(就近继承 oas-config-provider 的全局尺寸);status 支持 error / warning / success(error 同步 trigger 的 aria-invalid,表单校验亦可直接在宿主标 aria-invalid)。

受控开合 ​

受控开合(open + oas-open-change)

打开 / 关闭open: false

open 属性为展开状态的唯一数据源(受控):组件内外的开合都写回该属性,并在任何状态翻转时派发 oas-open-change(detail.open);宿主可拦截事件回写实现完全受控。Esc 关闭时焦点返回触发器。

空态 ​

空态(empty)

选项为空(且未设置 el.load)时面板显示「暂无数据」;搜索无匹配时显示「无匹配选项」。

加载态(loading) ​

加载态(loading)

进入 loading结束 loading

loading 期间触发器显示 spinner 并标 aria-busy(替代展开箭头);面板展开时只显示「加载中…」占位,不渲染选项——适合宿主拉取远程级联数据的请求窗口期。

字段映射(field-names) ​

字段映射(field-names)

field-names 为 JSON 字段别名({ label, value, children, disabled },对齐 oas-tree-select 契约),组件按别名读取原始数据(isLeaf 恒读原始键名);懒加载 el.load 返回的数据同样按映射归一。上例中「设计 / UI」经 off 字段禁用。

禁用 ​

禁用

无障碍名称(label) ​

label(可访问名称)

label 作为触发器的可访问名称(aria-label)来源:设置后读屏朗读该名称,优先于选中值文本与占位文本回退;未设置时按值文本 / 占位文本回退(对齐 oas-select 契约)。

弹出方向(placement) ​

placement(面板 12 向)

placement 支持 12 向:top / bottom / left / right × start / end / 居中(如 top-start、right-end),缺省 bottom(下方弹出,空间不足自动翻转避让);非法值静默回落。侧边栏、表格内等贴边场景可直接声明方向。

自定义后缀图标(suffix-icon 插槽) ​

suffix-icon(替换默认箭头)

template[slot="suffix-icon"] 替换触发器默认下拉箭头(展开时随容器旋转;loading 时仍由 spinner 接管)。

自定义选项渲染(option 插槽) ​

option(选项行自定义渲染)

template[slot="option"] 克隆到每个选项行(面板行与搜索结果行两路生效),[data-option-label] 节点自动绑定展示文本(面板行为选项 label、搜索行为完整路径文本);也可监听宿主事件改写行内容。

事件 ​

选中事件

监听 oas-change,detail.value 单选为路径数组、多选为路径数组的数组:

焦点事件(oas-focus / oas-blur) ​

focus / blur 事件

触发器获得/失去焦点派发 oas-focus / oas-blur(detail.value 与 oas-change 同形状:单选路径数组、多选路径二维数组);触发器 ↔ 搜索框 ↔ 标签按钮之间的组件内焦点转移不会误报。

移动形态(底部抽屉) ​

触屏(coarse pointer)或窄视口(<768px)下,多级面板自动改由 oas-bottom-sheet 底部抽屉承载:贴视口底升起 + 遮罩 + 拖拽把手下滑关闭(点遮罩 / Esc 同样收起),底部避让安全区;多级列在抽屉内容区内横向滑动;PC 形态保持原有浮层下拉不变。

API ​

oas-cascader ​

属性 ​

属性说明类型默认值
change-on-select选中任意层级即提交boolean—
check-strictly多选父子勾选解绑(勾选父级不联动子级)boolean—
clearable可清空(派发 oas-clear)boolean—
disabled禁用boolean—
expand-trigger子级展开触发方式:click(默认)/ hover(120ms 延时防误触)stringclick
field-names字段别名 JSON({ label, value, children, disabled }),对齐 tree-select 契约;懒加载结果同样映射string—
filterable可搜索(扁平路径结果)boolean—
item-height虚拟列定高(px,配合 virtual,默认 36)string36
label触发器可访问名称(aria-label),优先于值/占位回退string—
loading加载态:触发器 spinner + aria-busy,面板显示加载占位boolean—
max-tag-count多选标签按数量折叠 +N(带 title 列隐藏项)number—
multiple多选(复选框级联勾选;子级全选父级自动进值)boolean—
open受控展开状态(唯一状态源);移动形态(触屏/窄视口 <768px)下展开态由 oas-bottom-sheet 底部抽屉承载(下滑/遮罩/Esc 收起),PC 为浮层下拉boolean—
options级联选项,JSON 数组,支持 children / disabledCascaderOption[] | string[]
placeholder占位提示——
placement面板 12 向弹出方向(非法回落 bottom,保留自动翻转避让)stringbottom
separator路径分隔符(默认 /)string/
show-all-levels回显完整路径(默认 true);false 仅末级stringtrue
size尺寸档位 small / medium(默认)/ largestringmedium
status校验态:error / warning / success;error 联动 aria-invalidstring—
value路径数组(JSON),如 ["zj","hz"]string[] | string[][] | null[]
value-mode多选值策略:all(默认,全路径)/ parentFirst / onlyLeafstringall
virtual面板列虚拟滚动(超过 50 项的长列复用 oas-virtual-list 窗口渲染;短列/搜索/加载占位保持普通渲染)boolean—

Property(JS property;是否写回 attribute 见各行说明) ​

Property说明类型默认值
value当前值:单选取选中路径数组,multiple 时取选中路径集合数组string[] | string[][] | null—

事件 ​

事件说明
oas-blur触发器失焦时派发,detail.value 与 oas-change 同形状(组件内焦点转移不误报)
oas-change选择变化,detail: { value }(路径数组)
oas-clear点击清空按钮,detail 为清空前的值
oas-focus触发器聚焦时派发,detail.value 与 oas-change 同形状(组件内焦点转移不误报)
oas-open-change展开状态翻转,detail: { open }
oas-searchfilterable 输入,detail: { value }

插槽 ​

名称说明
template[slot="option"]选项行自定义渲染模板,[data-option-label] 节点绑定选项文本
template[slot="suffix-icon"]自定义触发器后缀图标(替换默认箭头;loading 时让位 spinner)

CSS 变量 ​

CSS 变量默认值
--oas-cascader-dropdown-height240px
--oas-glass-blurnone
--oas-glass-ringtransparent

基于 MIT OR Apache-2.0 双许可发布