Skip to content
On this page

组件库文档 tmui.design

级联器(点选) Cascader

当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择。


🌶️ 级联器(点选) Cascader 示例

查看模拟效果
示例模板
vue
<template>
	<tm-app color="white">
		<tm-sheet>
			<tm-text :font-size="24" _class="text-weight-b" label="基础示例,更多见文档"></tm-text>
			<tm-divider></tm-divider>
			<tm-button @click="testValue = []" label="清空选择"></tm-button>
			<tm-text :label="str ? str : '请选择'"></tm-text>
		</tm-sheet>
		<tm-cascader
			ref="textCascader"
			:beforeCellClick="loadData"
			@cell-click="test"
			v-model="testValue"
			:defaultValue="testValue"
			:data="dlist"
		></tm-cascader>
	</tm-app>
</template>
<script lang="ts" setup>
import { ref, computed } from 'vue'
import { onShow, onLoad } from '@dcloudio/uni-app'
import tmApp from '@/tmui/components/tm-app/tm-app.vue'
import tmSheet from '@/tmui/components/tm-sheet/tm-sheet.vue'
import tmText from '@/tmui/components/tm-text/tm-text.vue'
import tmButton from '@/tmui/components/tm-button/tm-button.vue'
import tmDivider from '@/tmui/components/tm-divider/tm-divider.vue'
import tmCascader from '@/tmui/components/tm-cascader/tm-cascader.vue'
const textCascader = ref<InstanceType<typeof tmCascader> | null>(null)
const dlist = ref([
	{
		text: '选项0-0',
		id: '0-0',
		disabled: false,
		children: []
	},
	{
		text: '选项0-1',
		id: '0-1',
		disabled: true,
		children: []
	},
	{
		text: '选项0-2',
		id: '0-2',
		disabled: false
	}
])
const testValue = ref([])

const str = computed(() => testValue.value.join('/'))
function loop(path = '0', max = 3, level = 0) {
	const list = []
	for (let i = 0; i < max; i += 1) {
		const key = `${path}-${i}`
		const treeNode = {
			text: '选项' + key,
			id: key,
			disabled: i == 1
		}

		if (level > 0) {
			treeNode.children = loop(key, max, level - 1)
		}

		list.push(treeNode)
	}
	return list
}
function test(item: any) {
	// console.log(item,'test')
}
function loadData(level: number, index: number, data: any) {
	console.log(level, index, data)
	let test = loop('0', 6, 3)
	return new Promise((res) => {
		dlist.value[level[0]].children = test[level[0]].children
		// dlist.value =test
		uni.showLoading({ title: '...' })
		setTimeout(function () {
			uni.hideLoading()
			textCascader.value?.reFresh()
			res(true)
		}, 1500)
	})
}
</script>

🌶️ 兼容性

APP-VUEAPP-NVUE小程序WEB/H5VUE3/TS
✔️✔️✔️✔️✔️

🌱 参数

本组件含有公共属性 公共属性

参数名类型默认值描述
followTheme[Boolean,String]true是否跟随主题
dataArray[]导入的数据,格式下见下方
defaultValueArray[]默认选中的数据
modelValueArray[]双向绑定输入数据,同v-model
heightNumber650高度,单位rpx
activeColorStringprimary激活状态下的颜色。
colorStringwhite背景主题
beforeTabClick[Function,Boolean]false点击tab切换之前执行的勾子函数。可以是promise.返回假时阻止切换。为true时,切换正常。方便动态加载数据。
beforeCellClick[Function(level,childrenIndex,childrenData),Boolean]false点击列表中项目时再自动切换到下一项时之前执行的勾子函数,方便动态加载数据。
slotTabHeigthNumber0介于tab和下面选项中间的插槽区域。如果想自定内容在这之间,可以设置高度,将会显示 。

上述beforeCellClick中返回的level参数是一个层级索引数组,可以根据这个值进行定位赋值异步加载数据。

data[]格式如下:

ts
export interface childrenData {
    id:number|string,
    text:string,
    disabled?:boolean,
	//如果没有下级,这个字段不要出现,或者设置为null值。
    children?:Array<childrenData>
}

🌹 事件

事件名参数返回数据描述
update:modelValue-Array更新选中数据,为v-model
tab-clickindex-切换tab事件
cell-click--点击项目时触发
change-modelValue选中改变时返回当前的数据

🌽 slot插槽

默认default,介于tab和下面选项之间的区域插槽。

🥗 ref方法

提供data就是使用data,如果不提供默认的[]空数组,将使用props.data进行刷新同步。

ts
reFresh(data:Array<childrenData>=[])

💏 文档贡献

此页文档由Sunlight贡献,如果对该框架感兴趣的可以参与我们一同进步!