Picker 选择器
Picker 单独使用时,仅仅是一个弹出框。
Picker 作为 FormItem 的子元素时,会成为表单项,并使 FormItem 成为可点击状态。
示例
基础用法
<Button onclick={() => (visible = true)}>选择</Button>
<Picker header="请选择" bind:visible columns={2} {loader} />
注:loader 函数用法详见 PickerView
表单-水平布局
<script lang="ts">
const province = ...
const city = ...
const area = ...
let form = $state({
location: ['65', '6527', '652702'],
})
function cascadeLoader(value: string[]) {
if (!value?.length) {
return province
} else if (value.length == 1) {
const re = city.filter(x => x.province === value[0])
if (re.length) return re
const pr = province.find(x => x.value === value[0])
if (!pr) return re
re.push({ value: `${pr.value}01`, label: pr.label, province: pr.value })
return re
} else {
return area.filter(x => x.city === value[1])
}
}
</script>
<Form header="表单-水平布局" bind:data={form} layout="horizontal">
<FormItem label="地区" field="location" required>
<Picker
bind:value={form.location}
header="请选择"
placeholder="省/市/区"
columns={3}
loader={cascadeLoader}
clearable
/>
</FormItem>
</Form>
表单-垂直布局+异步加载+自定义显示
<Form
header="表单-垂直布局+异步加载+自定义显示"
bind:data={form}
layout="vertical"
>
<FormItem label="地区" field="location" required>
<Picker
bind:value={form.location}
placeholder="省/市/区"
header="请选择"
columns={3}
loader={cascadeLoaderAsync}
clearable
>
{#snippet display(texts)}
<p>
{#each texts as text, index}
<span></span>
<span>{text}</span>
{#if index < texts.length - 1}
<Divider direction="vertical" />
{/if}
{/each}
</p>
{/snippet}
</Picker>
</FormItem>
</Form>
Picker
属性
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
value | 选中项 | unknown[] | $bindable([]) |
columns | 列的数量 | number | 1 |
loader | 所选项下一级的加载函数 | [Loader](./picker-view#loader-function) | 必填 |
header | 标题 | string | Snippet | undefined |
clearable | 是否显示清除按钮 | boolean | false |
noMask | 不展示遮罩 | boolean | false |
keepOpenOnClickMask | 阻止点击遮罩关闭 | boolean | false |
注:loader 函数可以返回 string 或 PickerItem 类型的数组。如果 loader 函数返回了 Promise,组件会执行异步加载。
配合 FormItem
当此组件作为 FormItem 组件的子元素时,以下属性生效。
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
display | 自定义内容显示 | Snippet<[labels: string[]]> | undefined |
placeholder | 占位文本 | string | undefined |
readonly | 是否只读 | boolean | false |
disabled | 是否禁用 | boolean | false |
事件
事件 | 说明 | 类型 |
---|---|---|
onChange | 变更事件 | (value: any[]) => void |
onCancel | 取消事件 | () => void |