跳转到内容

级联选择 Cascader

最常见的级联选择场景。默认按叶子节点提交值,也支持通过 expand-trigger="hover" 调整子级展开方式。

开启 check-strictly 后,父节点也可以直接选中;多选时会同时解除父子联动。

通过 allow-clear 显示清除按钮,兼容 clearable 别名。

在节点上设置 disabled 后,该项不会参与选择和回填。

设置 expand-child 后,进入一个分支时会自动展开它的第一个子菜单。

当回填值在当前选项树中不存在时,可以通过 fallback 控制展示文本,或关闭回退展示。

通过 field-names 映射不同的数据结构。

使用 format-label 统一格式化已选路径的展示内容。

通过 show-pathseparator 控制回填文案;多选时可用 max-tag-count="responsive" 让标签在窄宽度下自动折叠,和 Select / TreeSelect 复用同一套标签压缩逻辑。

传入 load-more 后,未标记 isLeaf: true 且没有 children 的节点会走懒加载分支。

选择框和下拉面板都可以显示加载态。

设置 multiple 后使用复选框交互,并复用当前组件库的标签回填逻辑。

CascaderPanel 可以单独作为路径面板使用,适合详情页或组合式表单布局。

开启 path-mode 后,值会以完整路径数组的形式回传。

设置 allow-search 启用搜索,兼容 filterable 别名;搜索面板默认展示整条路径,也可通过 search-option-only-label 只展示末级标签。

当前示例会在大体量子选项列里对比默认固定模式和显式 itemSize 写法,更适合验证级联面板在真实大数据量下的滚动表现。对于典型的多列菜单,默认固定高度通常就是最稳的配置。

通过 virtual-list-props 在大数据量场景下减少渲染开销。Cascader 当前菜单项默认按固定高度处理:如果你没有显式传 itemSizeminItemSize,组件会按 36px 菜单项高度补齐固定模式;如果要手动指定固定高度,请传 itemSize;只有显式传 minItemSize 时,才会切到动态高度模式。完整参数与迁移映射见 虚拟列表迁移指南

这次迁移以当前组件库内部的 TriggerSelectView、表单联动、主题和弹层容器链路为基础实现,同时保留一层有限的 Naive 兼容别名,方便旧业务先完成替换,再逐步收敛到本地 API。

Naive UISD Design Vue说明
n-cascadersd-cascader级联选择器主体
n-cascader-panelsd-cascader-panel面板组件
:options:options选项主属性保持一致
v-model:valuev-model / v-model:value当前同时支持 model-valuevalue 兼容别名
show / default-showpopup-visible / default-popup-visible,同时兼容 show / default-show新代码建议回到本地命名
filterableallow-search / filterable新代码建议使用 allow-search
clearableallow-clear / clearable新代码建议使用 allow-clear
show-pathshow-path控制已选标签是否展示完整路径
separatorseparator路径展示分隔符
max-tag-count="responsive"max-tag-count="responsive"多选标签会按当前容器宽度自动折叠
render-labelformat-label / #label / #option路径展示与选项展示改为本地格式化函数和插槽
render-prefix / render-suffix#prefix#arrow-icon#loading-icon#search-icon对外渲染入口统一收敛到插槽
fallback-option 风格回填fallback不存在的值仍可回显,但回调签名以当前组件库为准
  1. 运行时行为以当前组件库为准,尤其是弹层定位、表单 onChange / onBlur 联动、局部主题和容器挂载,已经统一接入本地 Trigger / ConfigProvider / ThemeProvider
  2. 公开定制能力只保留插槽和少量格式化函数,不再对外保留 render function API。历史上依赖 render-labelrender-prefixrender-suffix 的场景,建议分别迁到 format-labellabeloptionprefixarrow-iconloading-iconsearch-icon 等公开插槽或属性。
  3. 当前版本保留 valueshowdefault-showfilterableclearable 等兼容别名,但新增代码更建议直接使用 model-valuepopup-visibledefault-popup-visibleallow-searchallow-clear
  4. 搜索面板、标签回填、路径格式化和多选勾选链路都复用了当前组件库内部实现。max-tag-count="responsive"show-pathseparator 现在已和 Select / TreeSelect 保持一致。
  5. check-strategy 这一类会改变多选值语义的 Naive 行为当前仍未对齐;如果旧代码依赖它,需要保留为迁移差异单独评估。
  1. 先替换组件标签:把 n-cascader / n-cascader-panel 替换成 sd-cascader / sd-cascader-panel,原来的 optionsvalueshowfilterableclearable 可以先靠兼容层跑通。
  2. 再统一命名:逐步把 valueshowdefault-showfilterableclearable 迁到 model-valuepopup-visibledefault-popup-visibleallow-searchallow-clear
  3. 然后处理自定义内容:删除 render function 写法,改用 labeloptionprefix 等模板插槽,保持公开扩展方式一致。
  4. 最后回归复杂交互:重点检查搜索、懒加载、多选、严格选择、路径回填、虚拟列表和 fallback 场景。

下面的示例把兼容别名写法和推荐写法放在一起,方便逐步替换而不是一次性重写。

参数名描述类型默认值版本
path-mode绑定值是否为路径booleanfalse
multiple是否为多选状态booleanfalse
model-value (v-model)绑定值CascaderModelValue-
value (v-model:value)model-value 的兼容别名CascaderModelValue-
default-value默认值(非受控状态)CascaderModelValue'' | undefined | []
options级联选择器的选项CascaderOption[][]
disabled是否禁用booleanfalse
error是否为错误状态booleanfalse
size选择框的大小'mini' | 'small' | 'medium' | 'large''medium'
allow-search是否允许搜索,兼容 filterable 别名booleanfalse (single) | true (multiple)
filterableallow-search 的兼容别名boolean-
allow-clear是否允许清除,兼容 clearable 别名booleanfalse
clearableallow-clear 的兼容别名boolean-
input-value (v-model)输入框的值string-
default-input-value输入框默认值string''
popup-visible (v-model)是否显示下拉框boolean-
show (v-model:show)popup-visible 的兼容别名boolean-
default-popup-visible默认是否显示下拉框booleanfalse
default-showdefault-popup-visible 的兼容别名boolean-
expand-trigger展开下一级的触发方式'click' | 'hover''click'
placeholder占位符string-
filter-option自定义选项过滤方法(inputValue: string, option: CascaderOption) => boolean-
popup-container弹出框挂载容器string | HTMLElement-
max-tag-count多选模式最多显示的标签数量,0 表示不限制,responsive 表示按容器宽度自动折叠number | 'responsive'0
show-path回填时是否展示完整路径booleantrue
separator回填路径使用的分隔符string' / '
format-label自定义已选路径的展示内容(options: CascaderOption[]) => string-
trigger-props下拉菜单触发器属性TriggerProps-
check-strictly是否开启严格选择模式booleanfalse
load-more数据懒加载函数(option: CascaderOption, done: (children?: CascaderOption[]) => void) => void-2.13.0
loading是否为加载中状态booleanfalse2.15.0
search-option-only-label搜索面板是否只展示末级标签booleanfalse2.18.0
search-delay触发搜索事件的延迟时间number5002.18.0
field-names自定义字段映射CascaderFieldNames-2.22.0
value-key对象值用于确定 key 的字段string'value'2.29.0
fallback自定义不存在选项值的展示boolean | ((value: CascaderOptionValue | CascaderOptionValue[]) => string)true2.29.0
expand-child是否展开子菜单booleanfalse2.29.0
virtual-list-props虚拟列表配置。完整参数与迁移说明见 虚拟列表迁移指南VirtualListProps-2.49.0
tag-nowrap标签内容不换行booleanfalse2.56.1
事件名描述参数
update:modelValuev-model 更新事件value: CascaderModelValue
update:valuevalue 兼容别名的更新事件value: CascaderModelValue
change选中值改变时触发value: CascaderModelValue
input-value-change输入值改变时触发value: string
clear点击清除按钮时触发-
search用户搜索时触发value: string
update:popup-visible弹层显隐更新事件visible: boolean
popup-visible-change弹层显隐变化时触发visible: boolean
update:showshow 兼容别名的更新事件visible: boolean
showChangeshow 兼容别名的变化事件visible: boolean
focus获得焦点时触发ev: FocusEvent
blur失去焦点时触发ev: FocusEvent
插槽名描述参数版本
label选择框的显示内容data: CascaderOption2.18.0
option自定义选项内容data: CascaderOption2.18.0
prefix前缀元素-2.23.0
arrow-icon选择框箭头图标-2.16.0
loading-icon选择框加载图标-2.16.0
search-icon选择框搜索图标-2.16.0
empty选项为空时的显示内容-2.23.0
参数名描述类型默认值版本
path-mode绑定值是否为路径booleanfalse
multiple是否为多选状态booleanfalse
model-value (v-model)绑定值CascaderModelValue-
value (v-model:value)model-value 的兼容别名CascaderModelValue-
default-value默认值(非受控状态)CascaderModelValue'' | undefined | []
options级联选择器的选项CascaderOption[][]
expand-trigger展开下一级的触发方式'click' | 'hover''click'
check-strictly是否开启严格选择模式booleanfalse
load-more数据懒加载函数(option: CascaderOption, done: (children?: CascaderOption[]) => void) => void-2.13.0
field-names自定义字段映射CascaderFieldNames-2.22.0
value-key对象值用于确定 key 的字段string'value'2.29.0
expand-child是否展开子菜单booleanfalse2.29.0
事件名描述参数
update:modelValuev-model 更新事件value: CascaderModelValue
update:valuevalue 兼容别名的更新事件value: CascaderModelValue
change选中值改变时触发value: CascaderModelValue
插槽名描述参数版本
empty选项为空时的显示内容-2.23.0
参数名描述类型默认值版本
value选项值,支持对象值string | number | Record<string, unknown>-
label选项文本string-
disabled是否禁用booleanfalse
tagProps多选标签透传属性TagProps-2.8.0
children下一级选项CascaderOption[]-
isLeaf是否为叶子节点booleanfalse