Skip to content

Cascader 级联选择器 ​

基础用法 ​

从底部弹出的多级联动选择器,适合多层级数据的逐级选择。

  • 数据层级不限,支持静态数据与逐层异步加载两种来源
  • 顶部导航条展示已选路径,可点击回退或左右滑动切换层级
  • 点选选项即写入绑定值并触发变化事件,无需确认

必须放在 sn-page 下

本组件为弹出层,需直接放在 sn-page 根节点下(页面根节点或 sn-page 的直接子节点),否则页面的 --sn-*、--ani-time-* 变量不生效,颜色与动画异常。

vue
<template>
	<sn-cascader ref="cascaderEle" v-model="value" :data="data" title="请选择商品分类" @change="onChange"></sn-cascader>
</template>

更多演示请下载 demo 查看

实现原理 ​

组件基于 sn-drawer 封装,children 支持任意层级;顶部导航条(已选路径、未选层级的占位项与随层级切换移动的下划线)与当前层级的选项列表均由组件内部渲染。

注意事项 ​

选中叶子节点后弹出层自动关闭;选项满足以下任一条件即视为叶子节点:leaf 为 true、children 为空数组、或 children 为空且未配置 loadData。

进阶用法 ​

异步加载 ​

vue
<template>
	<sn-cascader ref="cascaderEle" v-model="value" :load-data="loadData" @load-error="onLoadError"></sn-cascader>
</template>
<script lang="ts" setup>
	function loadData(parent: SnCascaderOption | null, level: number, resolve: SnCascaderResolve, reject: SnCascaderReject): void {
		if (parent == null) {
			resolve(rootOptions)
			return
		}
		requestChildren(parent.value, level).then((options: SnCascaderOption[]) => {
			resolve(options)
		}).catch(() => {
			reject()
		})
	}
</script>

属性 ​

参数说明类型默认值可选值
v-model当前选中的值路径(各级 option 的 value 数组)SnCascaderValue[]-
data级联数据源(静态数据,children 任意嵌套)SnCascaderOption[][]-
loadData异步加载子级数据的函数,通过 resolve/reject 返回该层结果SnCascaderLoadDatanull-
disabled是否禁用(禁用后无法打开,所有选项视为禁用)Booleanfalsetrue | false
height弹出层整体高度String | Number470px-
title标题String请选择-
titleSize标题字号String | Number$17-
placeholder未选层级在导航条上的占位文字String请选择-
loadingText加载中提示文字String加载中-
emptyText无数据提示文字String暂无数据-
navTextSize导航条文字字号String | Number$15-
stateTextSize加载中/空状态提示文字字号String | Number$13-
loadingIconSize加载图标大小String | Number$22-
closeIconSize关闭图标大小String | Number$22-
showClose是否显示右上角关闭按钮Booleantruetrue | false
showScrollbar选项列表是否显示滚动条Booleantruetrue | false
itemBorder选项之间是否显示分隔线Booleanfalsetrue | false
navMode导航条下划线切换动画方式:swipe 平移滑动,push 挤压伸展Stringswipeswipe | push
maskClose是否可以通过点击蒙层关闭Booleantruetrue | false
maskOpacity蒙层透明度Number0.40~1
preventBack是否阻止返回键/返回手势关闭Booleanfalsetrue | false
customStyle自定义根节点样式SnStyleValue--
customClass自定义根节点外部样式类String--
headerStyle自定义标题栏样式SnStyleValue--
headerClass外部样式类String--
titleStyle自定义标题样式SnStyleValue--
titleClass外部样式类String--
closeStyle自定义关闭按钮样式SnStyleValue--
closeClass外部样式类String--
navStyle自定义导航条容器样式SnStyleValue--
navClass外部样式类String--
navItemStyle自定义导航项样式SnStyleValue--
navItemClass外部样式类String--
navTextStyle自定义导航项文字样式SnStyleValue--
navTextClass外部样式类String--
activeNavTextStyle自定义当前层级导航项文字样式SnStyleValue--
activeNavTextClass外部样式类String--
listStyle自定义选项列表样式SnStyleValue--
listClass外部样式类String--
optionStyle自定义选项样式SnStyleValue--
optionClass外部样式类String--
optionTextStyle自定义选项文字样式SnStyleValue--
optionTextClass外部样式类String--
activeOptionTextStyle自定义选中选项文字样式SnStyleValue--
activeOptionTextClass外部样式类String--
optionIconStyle自定义选项图标样式SnStyleValue--
optionIconClass外部样式类String--
activeOptionIconStyle自定义选中选项对钩图标样式SnStyleValue--
activeOptionIconClass外部样式类String--

级联选中值:各级选项 value 组成的数组(v-model)。

类型说明
string[]各级选中值数组

级联选项。

名称类型必填描述
valueString是选项值
labelString是选项显示文本
disabledBoolean否是否禁用
leafBoolean否是否叶子节点(懒加载模式下标记不再展开)
childrenSnCascaderOption[]否子级选项列表

懒加载回调类型:

类型签名
SnCascaderResolve(options: SnCascaderOption[]) => void
SnCascaderReject() => void
SnCascaderLoadData(parent: SnCascaderOption | null, level: number, resolve: SnCascaderResolve, reject: SnCascaderReject) => void

sn-cascader 的 load-data 属性接收 SnCascaderLoadData 函数:parent 为 null 表示加载第一级,level 为当前层级;成功经 resolve(options) 返回选项列表,失败调用 reject()。


事件 ​

名称类型说明
change(value: SnCascaderValue, detail: SnCascaderDetail) => Void点选选项后触发,v-model 同步更新
select(value: SnCascaderValue, detail: SnCascaderDetail) => Void点选选项后触发(与 change 同时触发)
cancel() => Void点击关闭按钮时触发
load(parent: SnCascaderOption | null, level: Number, options: SnCascaderOption[]) => Void异步加载成功后触发
load-error(parent: SnCascaderOption | null, level: Number) => Void异步加载失败时触发
open() => Void弹出层打开后触发
close() => Void弹出层关闭后触发
clickoverlay() => Void点击蒙层时触发
beforeenter() => Void进入动画开始前触发
enter() => Void进入动画开始时触发
afterenter() => Void进入动画结束后触发
beforeleave() => Void离开动画开始前触发
leave() => Void离开动画开始时触发
afterleave() => Void离开动画结束后触发

change 事件返回的详情。

名称类型必填描述
valuesString[]是各级选中值
labelsString[]是各级选中文本
optionsSnCascaderOption[]是各级选中的选项对象

方法 ​

名称参数返回值描述
open--打开级联选择器(重置路径并按 v-model 回溯定位)
close--关闭级联选择器

使用 MIT 协议