Skip to content

Cascader 级联选择器

基础用法

  • 从底部弹出的多级联动选择器,基于 sn-drawer 封装,children 支持任意层级。
  • 顶部导航条展示已选路径与占位项,支持点击导航回退层级,也支持左右滑动切换层级;导航条下划线随层级切换动画移动。
  • 每次点选选项都会实时写入 v-model 并触发 change 事件(无确定按钮);选中叶子节点后自动关闭。叶子判定规则:leaf 为 true、children 为空数组、或 children 为空且未配置 loadData
  • 支持两种数据源:静态传入 data,或配置 loadData 异步逐层加载(通过 resolve / reject 返回结果,加载中显示 loading 态,失败触发 load-error)。
  • 打开时若 v-model 已有值,会自动按值回溯加载并定位到对应层级。
  • 使用时需放在 sn-page 根节点下。
vue
<template>
	<sn-cascader ref="cascaderEle" v-model="value" :data="data" title="请选择商品分类" @change="onChange"></sn-cascader>
</template>

更多演示请下载 demo 查看

进阶用法

异步加载

vue
<template>
	<sn-cascader ref="cascaderEle" v-model="value" :load-data="loadData" @load-error="onLoadError"></sn-cascader>
</template>
<script lang="uts" 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自定义根节点样式UTSJSONObject | String--
customClass自定义根节点外部样式类String--
headerStyle自定义标题栏样式UTSJSONObject | String--
headerClass外部样式类String--
titleStyle自定义标题样式UTSJSONObject | String--
titleClass外部样式类String--
closeStyle自定义关闭按钮样式UTSJSONObject | String--
closeClass外部样式类String--
navStyle自定义导航条容器样式UTSJSONObject | String--
navClass外部样式类String--
navItemStyle自定义导航项样式UTSJSONObject | String--
navItemClass外部样式类String--
navTextStyle自定义导航项文字样式UTSJSONObject | String--
navTextClass外部样式类String--
activeNavTextStyle自定义当前层级导航项文字样式UTSJSONObject | String--
activeNavTextClass外部样式类String--
listStyle自定义选项列表样式UTSJSONObject | String--
listClass外部样式类String--
optionStyle自定义选项样式UTSJSONObject | String--
optionClass外部样式类String--
optionTextStyle自定义选项文字样式UTSJSONObject | String--
optionTextClass外部样式类String--
activeOptionTextStyle自定义选中选项文字样式UTSJSONObject | String--
activeOptionTextClass外部样式类String--
optionIconStyle自定义选项图标样式UTSJSONObject | String--
optionIconClass外部样式类String--
activeOptionIconStyle自定义选中选项对钩图标样式UTSJSONObject | String--
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-cascaderload-data 属性接收 SnCascaderLoadData 函数:parentnull 表示加载第一级,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 协议