PickerSelect (选择列表)
t-select的另一个版本,适用于移动端,t-select一般适用于PC端
支持平台
安卓 | ios | 鸿蒙 | web | 微信小程序 |
---|---|---|---|---|
√ | √ | √ | √ | √ |
示例代码
html
<template>
<t-page main-class="p-30">
<t-card title="PickerSelect 选择列表" main-class="mb-30"
sub-title="t-select的另一个版本,适用于移动端,t-select一般适用于PC端"></t-card>
<t-section title="弹窗-远程搜索示例" main-class="mb-30"></t-section>
<t-picker-select v-model="val5" valueKey="value" labelKey="label" :remote-method="search" title="请选择菜单"
:remote="true" main-class="tdr tdb mb-30" size="large">
</t-picker-select>
<t-text main-class="tdr tdb tdp mb-30">值:{{val5}}</t-text>
<t-button type="primary" @click="test5">双向绑定测试</t-button>
<t-picker-select v-model="val4" valueKey="value" labelKey="label" :remote-method="search" title="请选择菜单"
:remote="true" main-class="tdr tdb mb-30" size="large">
</t-picker-select>
<t-text main-class="tdr tdb tdp mb-30">值:{{val4.join('-')}}</t-text>
<t-button type="primary" @click="test3">双向绑定测试</t-button>
<t-col main-class="tdr tdb tdp mb-30">
<t-text main-class="slh-70">values:{{pickerSelectChange.getArray('values')?.join(',')}}</t-text>
<t-text main-class="slh-70">labels:{{pickerSelectChange.getArray('labels')?.join(',')}}</t-text>
</t-col>
<t-section main-class="mb-30" title="嵌入式-多选(v-model为数组则为多选)"></t-section>
<t-picker-select v-model="val3" :list="list" :embeddable="true" valueKey="value" labelKey="label"
main-class="tdr tdb mb-30" size="large">
</t-picker-select>
<t-text main-class="tdr tdb tdp mb-30">值:{{val3.join('-')}}</t-text>
<t-button type="primary" @click="test">双向绑定测试</t-button>
<t-section main-class="mb-30" title="嵌入式-单选(v-model为字符串则为单选)"></t-section>
<t-picker-select v-model="val2" :list="list" :embeddable="true" valueKey="value" labelKey="label"
main-class="tdr tdb mb-30" size="large">
</t-picker-select>
<t-text main-class="tdr tdb tdp mb-30">值:{{val2}}</t-text>
<t-button type="primary" @click="test2">双向绑定测试</t-button>
</t-page>
</template>
<script setup>
const val1 = ref<string>('food3');
const val2 = ref<string>('food1');
const val5 = ref<string>('food3');
const val3 = ref<string[]>(['food4', 'food5']);
const val4 = ref<string[]>(['food4', 'food5']);
const pickerSelectChange = ref<UTSJSONObject>({});
const list = ref<UTSJSONObject[]>([
{ value: 'food1', label: '披萨', disabled: true },
{ value: 'food2', label: '寿司', disabled: true },
{ value: 'food3', label: '汉堡' },
{ value: 'food4', label: '拉面' },
{ value: 'food5', label: '饺子' },
{ value: 'food11', label: '馄饨' },
{ value: 'food6', label: '蛋糕' },
{ value: 'food7', label: '冰淇淋' },
{ value: 'food8', label: '巧克力' },
{ value: 'food9', label: '薯条' },
{ value: 'food10', label: '蛋挞' }
]);
const search = (e : string) : Promise<UTSJSONObject[]> => {
return new Promise((
resolve : (res : UTSJSONObject[]) => void
) => {
// 这里模拟uni.showLoading
console.log('搜索中');
setTimeout(() => {
if (e === '') {
// 这里模拟uni.hideLoading
resolve(list.value);
} else {
const filteredList = list.value.filter((item : UTSJSONObject) => {
return (item.getString('label') as string).toLocaleLowerCase().includes(e);
});
// 这里模拟uni.hideLoading
resolve(filteredList);
}
}, 500);
});
};
function test5() {
val5.value = 'food6'
}
function test() {
// val3.value = ['food3', 'food4']
val3.value.push('food3')
}
function test3() {
// val4.value = ['food6', 'food7']
val4.value.push('food6')
}
function test2() {
val2.value = 'food3'
}
const checkChange = (e : UTSJSONObject) => {
console.log(e)
pickerSelectChange.value = e;
};
const radioChange = (e : UTSJSONObject) => {
console.log(JSON.stringify(e))
pickerSelectChange.value = e;
};
</script>
属性
名称 | 类型 | 默认值 | 说明 | 可选值 |
---|---|---|---|---|
size | String | mini | 组件尺寸 | large(大尺寸), medium(中尺寸), small(小尺寸), mini(迷你) |
type | String | "" | 组件类型 | info(信息), primary(正常), error(错误), warning(警告), success(成功) |
disabled | Boolean | false | 组件是否禁用 | false, true |
stop | Boolean | false | 是否阻止事件冒泡(Tui统一写法处理事件冒泡) | false, true |
hover | Boolean | true | 是否有点击效果 | false, true |
path | String | "" | 点击组件后跳转的页面路径,如果为空则响应点击事件,如果不为空则跳转页面不会响应单击事件。 | - |
mainClass | String | "" | 组件根节点的样式 | - |
nativeClass | String | "" | 组件根节点原生样式 | - |
effect | String | "normal" | 组件显示主题 | normal(正常), dark(深色), light(浅色), plain(镂空) |
modelValue | any | `` | 双向绑定的值 | |
type | String | p | 主题类型 | |
valueKey | String | value | value字段的key | |
labelKey | String | label | 标签字段的key | |
embeddable | Boolean | false | 是否嵌入页面 | |
list | UTSJSONObject[] | [] | 数据源 | |
remote | Boolean | false | 是否远程搜索 | |
contentClass | String | `` | 内容样式 | |
remoteMethod | any | `(_ : string) : Promise<UTSJSONObject[]> => { |
return Promise.resolve([] as UTSJSONObject[])
}` | 远程搜索自定义函数 | |
事件
名称 | 返回参数 | 说明 |
---|---|---|
change | (e:UTSJSONObject) | 值发生变化时触发 |
confirm | (e:UTSJSONObject) | 点确认时触发 |
cancel | - | 点击取消时候触发 |
方法
名称 | 参数 | 返回值 | 说明 |
---|---|---|---|
show | - | - | 打开、关闭窗口 |
插槽
名称 | 返回值 | 说明 |
---|---|---|
default | - |