Skip to content

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>

属性

名称类型默认值说明可选值
sizeStringmini组件尺寸large(大尺寸), medium(中尺寸), small(小尺寸), mini(迷你)
typeString""组件类型info(信息), primary(正常), error(错误), warning(警告), success(成功)
disabledBooleanfalse组件是否禁用false, true
stopBooleanfalse是否阻止事件冒泡(Tui统一写法处理事件冒泡)false, true
hoverBooleantrue是否有点击效果false, true
pathString""点击组件后跳转的页面路径,如果为空则响应点击事件,如果不为空则跳转页面不会响应单击事件。-
mainClassString""组件根节点的样式-
nativeClassString""组件根节点原生样式-
effectString"normal"组件显示主题normal(正常), dark(深色), light(浅色), plain(镂空)
modelValueany``双向绑定的值
typeStringp主题类型
valueKeyStringvaluevalue字段的key
labelKeyStringlabel标签字段的key
embeddableBooleanfalse是否嵌入页面
listUTSJSONObject[][]数据源
remoteBooleanfalse是否远程搜索
contentClassString``内容样式
remoteMethodany`(_ : string) : Promise<UTSJSONObject[]> => {
				return Promise.resolve([] as UTSJSONObject[])
			}` | 远程搜索自定义函数 |  |

事件

名称返回参数说明
change(e:UTSJSONObject)值发生变化时触发
confirm(e:UTSJSONObject)点确认时触发
cancel-点击取消时候触发

方法

名称参数返回值说明
show--打开、关闭窗口

插槽

名称返回值说明
default-