组件库文档 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-VUE | APP-NVUE | 小程序 | WEB/H5 | VUE3/TS |
---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
🌱 参数
本组件含有公共属性 公共属性
参数名 | 类型 | 默认值 | 描述 |
---|---|---|---|
followTheme | [Boolean,String] | true | 是否跟随主题 |
data | Array | [] | 导入的数据,格式下见下方 |
defaultValue | Array | [] | 默认选中的数据 |
modelValue | Array | [] | 双向绑定输入数据,同v-model |
height | Number | 650 | 高度,单位rpx |
activeColor | String | primary | 激活状态下的颜色。 |
color | String | white | 背景主题 |
beforeTabClick | [Function,Boolean] | false | 点击tab切换之前执行的勾子函数。可以是promise.返回假时阻止切换。为true时,切换正常。方便动态加载数据。 |
beforeCellClick | [Function(level,childrenIndex,childrenData),Boolean] | false | 点击列表中项目时再自动切换到下一项时之前执行的勾子函数,方便动态加载数据。 |
slotTabHeigth | Number | 0 | 介于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-click | index | - | 切换tab事件 |
cell-click | - | - | 点击项目时触发 |
change | - | modelValue | 选中改变时返回当前的数据 |
🌽 slot插槽
默认default,介于tab和下面选项之间的区域插槽。
🥗 ref方法
提供data就是使用data,如果不提供默认的[]空数组,将使用props.data进行刷新同步。
ts
reFresh(data:Array<childrenData>=[])
💏 文档贡献
此页文档由Sunlight贡献,如果对该框架感兴趣的可以参与我们一同进步!