Skip to content

Cascader 级联选择器

适用于具有明确层级结构的数据选择,如地区、部门、分类和资源目录等。

基础用法

最常见的单选级联场景。

基础用法

初始值回显

只要 v-model 值结构与 emit-path 配置一致,就可以正确回显单选和多选结果。

浙江省 / 杭州市 / 西湖区
浙江省 / 杭州市 / 滨江区江苏省 / 南京市 / 玄武区
初始值回显

禁用状态

既可以禁用整个组件,也可以在选项数据中禁用某些节点。

浙江省 / 杭州市 / 西湖区
禁用状态

多选与标签折叠

通过 multiple 开启多选,collapse-tags 用于压缩标签展示。

多选与标签折叠

任意层级选择

开启 check-strictly 后,父节点和叶子节点都可以直接作为结果。

任意层级选择

返回叶子值

默认情况下组件返回完整路径数组;设置 emit-path="false" 后只返回当前选中节点的值。

浙江省 / 杭州市 / 西湖区

Value: xihu

返回叶子值

搜索过滤

开启 filterable 后会在客户端根据完整路径进行过滤,也可以通过 filter-method 自定义匹配逻辑。

搜索过滤

自定义节点内容

通过默认插槽自定义下拉节点的渲染。

自定义节点内容

自定义字段名

如果数据结构不是 value / label / children,可以通过 props 重新映射字段。

自定义字段名

大数据量优化

开启 virtual 后,下拉列表会使用虚拟滚动渲染节点。

虚拟滚动

在 Nuxt 中使用

安装 @yh-ui/nuxt 后可以直接使用 YhCascader。输入框本体和已选值可以在 SSR 阶段正常输出,下拉层会在客户端交互时通过 Teleport 渲染。

Nuxt 中使用

API

Props

属性名说明类型默认值
model-value / v-model绑定值string | number | (string | number)[] | (string | number)[][]undefined
options选项数据CascaderOption[]undefined
placeholder占位文本stringundefined
disabled是否禁用booleanfalse
clearable是否可清空booleanfalse
size组件尺寸'large' | 'default' | 'small'undefined
filterable是否支持搜索booleanfalse
filter-method自定义过滤方法(node: CascaderOption, keyword: string) => booleanundefined
separator路径分隔符string' / '
show-all-levels是否展示完整路径标签booleantrue
collapse-tags多选时是否折叠标签booleanfalse
collapse-tags-tooltip折叠标签时是否显示提示booleanfalse
max-collapse-tags折叠前最多显示的标签数number1
multiple是否多选booleanfalse
check-strictly是否允许选择任意层级booleanfalse
expand-trigger展开触发方式'click' | 'hover'undefined
emit-path是否返回完整路径booleantrue
virtual是否启用虚拟滚动booleanfalse
virtual-item-height虚拟滚动项高度number34
props自定义字段配置Partial<CascaderConfig>undefined
popper-class下拉层自定义类名stringundefined
teleported是否将下拉层传送到 bodybooleantrue
tag-type多选标签类型'success' | 'info' | 'warning' | 'danger' | ''''
validate-event是否触发表单校验booleantrue
theme-overrides组件主题覆盖变量ComponentThemeVarsundefined

CascaderOption

字段说明类型
value节点值string | number
label节点文本string
children子节点数组CascaderOption[] | undefined
disabled是否禁用boolean | undefined
leaf是否叶子节点boolean | undefined

CascaderConfig

字段说明类型默认值
expandTrigger展开触发方式'click' | 'hover''click'
multiple是否多选booleanfalse
checkStrictly是否允许任意层级选择booleanfalse
emitPath是否返回完整路径booleantrue
lazy是否启用懒加载booleanfalse
lazyLoad懒加载函数(node: CascaderOption, resolve: (children: CascaderOption[]) => void) => voidundefined
value值字段名string'value'
label标签字段名string'label'
children子节点字段名string'children'
disabled禁用字段名string'disabled'
leaf叶子节点字段名string'leaf'

Events

事件名说明参数
update:modelValue绑定值变化时触发(value: CascaderValue | undefined) => void
change选中值变化时触发(value: CascaderValue | undefined) => void
focus输入框获取焦点时触发(event: FocusEvent) => void
blur输入框失去焦点时触发(event: FocusEvent) => void
clear点击清空按钮时触发() => void
expand-change展开路径变化时触发(value: (string | number)[]) => void
visible-change下拉层显隐变化时触发(visible: boolean) => void

Slots

插槽名说明参数
default自定义节点内容{ node: CascaderOption, data: CascaderOption }
empty无匹配数据时的内容-

Expose

名称说明类型
focus让输入框获取焦点() => void
blur让输入框失去焦点() => void
getCheckedNodes获取当前选中的节点对象(leafOnly?: boolean) => CascaderOption[]
inputRef原生输入框引用Ref<HTMLInputElement | undefined>

类型导出

类型名说明
YhCascaderProps组件 Props 类型
YhCascaderEmits组件 Emits 类型
YhCascaderExpose组件 Expose 类型
YhCascaderOption选项节点类型

主题变量

组件支持 themeOverrides,并在样式中消费以下 CSS 变量:

变量名说明默认值
--yh-cascader-height默认高度32px
--yh-cascader-height-large大尺寸高度40px
--yh-cascader-height-small小尺寸高度24px
--yh-cascader-bg-color输入区背景色var(--yh-fill-color-blank, #fff)
--yh-cascader-border-color边框颜色var(--yh-border-color, #dcdfe6)
--yh-cascader-border-color-hover悬停边框色var(--yh-border-color-hover, #c0c4cc)
--yh-cascader-border-color-focus聚焦边框色var(--yh-color-primary, #409eff)
--yh-cascader-border-radius圆角var(--yh-border-radius-base, 4px)
--yh-cascader-text-color文本色var(--yh-text-color-regular, #606266)
--yh-cascader-placeholder-color占位文本色var(--yh-text-color-placeholder, #a8abb2)
--yh-cascader-disabled-bg-color禁用背景色var(--yh-fill-color-light, #f5f7fa)
--yh-cascader-disabled-text-color禁用文本色var(--yh-text-color-placeholder, #a8abb2)
--yh-cascader-node-height节点高度34px
--yh-cascader-node-bg-color-hover节点悬停背景色var(--yh-fill-color-light, #f5f7fa)
--yh-cascader-node-text-color-hover节点悬停文本色var(--yh-text-color-regular, #606266)
--yh-cascader-node-bg-color-active节点激活背景色var(--yh-fill-color-light, #f5f7fa)
--yh-cascader-node-text-color-active节点激活文本色var(--yh-color-primary, #409eff)
--yh-cascader-dropdown-bg-color下拉层背景色var(--yh-bg-color-overlay, #fff)
--yh-cascader-dropdown-border-color下拉层边框色var(--yh-border-color-light, #e4e7ed)
--yh-cascader-dropdown-shadow下拉层阴影var(--yh-box-shadow-light, 0 2px 12px 0 rgba(0, 0, 0, 0.1))
--yh-cascader-menu-min-width菜单最小宽度180px
--yh-cascader-menu-max-height菜单最大高度274px
--yh-cascader-menu-border-color菜单分隔线颜色var(--yh-border-color-light, #e4e7ed)

Released under the MIT License.