介绍
组合了级联选择、弹出框组件,实现了便捷快速的级联选择功能。
代码演示
基础使用
使用 v-model 双向绑定当前值,使用 v-model:visible 控制弹出框显隐。
vue
<template>
<s-cascader-popout
v-model="value"
v-model:visible="visible"
title="请选择省市区"
:options="regionData"
:field-keys="{ label: 'name', value: 'code' }"
@change="onChange"
/>
<s-list card>
<s-list-item>
<s-button @click="visible = true">
{{ value ? value : '请选择' }}
</s-button>
</s-list-item>
<s-list-item
title="设置为:440111 (广东省/广州市/白云区)"
arrow
hover
@click="value = 440111"
/>
<s-list-item title="清空" arrow hover @click="value = undefined" />
</s-list>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { getRegionData } from 'region-data'
import { type CascaderOption } from 'sard'
const regionData = getRegionData()
const visible = ref(false)
const value = ref<number | undefined>(150102)
const onChange = (value: any, selectedOptions: CascaderOption[]) => {
console.log('change', value, selectedOptions)
}
</script>vue
<template>
<s-cascader-popout
v-model="value"
v-model:visible="visible"
title="请选择省市区"
:options="regionData"
:field-keys="{ label: 'name', value: 'code' }"
@change="onChange"
/>
<s-list card>
<s-list-item>
<s-button @click="visible = true">
{{ value ? value : '请选择' }}
</s-button>
</s-list-item>
<s-list-item
title="设置为:440111 (广东省/广州市/白云区)"
arrow
hover
@click="value = 440111"
/>
<s-list-item title="清空" arrow hover @click="value = undefined" />
</s-list>
</template>
<script setup lang="js">
import { ref } from 'vue'
import { getRegionData } from 'region-data'
import 'sard'
const regionData = getRegionData()
const visible = ref(false)
const value = ref(150102)
const onChange = (value, selectedOptions) => {
console.log('change', value, selectedOptions)
}
</script>多选
设置 multiple 可进行多选。
vue
<template>
<s-cascader-popout
v-model="value"
v-model:visible="visible"
title="请选择省市区"
:options="regionData"
:field-keys="{ label: 'name', value: 'code' }"
multiple
all-levels
check-strictly
@change="onChange"
/>
<s-list card>
<s-list-item
:title="value ? JSON.stringify(value) : '请选择'"
arrow
hover
@click="visible = true"
/>
<s-list-item
title="设置为:[[440000, 440100, 440106], [440000, 440100, 440111]] ([天河区, 白云区])"
arrow
hover
@click="
value = [
[440000, 440100, 440106],
[440000, 440100, 440111],
]
"
/>
<s-list-item title="清空" arrow hover @click="value = undefined" />
</s-list>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { getRegionData } from 'region-data'
import { type CascaderOption, type CascaderValue } from 'sard'
const regionData = getRegionData()
const visible = ref(false)
const value = ref<CascaderValue | undefined>([
[440000, 440100, 440106],
[440000, 440100, 440111],
])
const onChange = (value: any, selectedOptions: CascaderOption[]) => {
console.log('change', value, selectedOptions)
}
</script>vue
<template>
<s-cascader-popout
v-model="value"
v-model:visible="visible"
title="请选择省市区"
:options="regionData"
:field-keys="{ label: 'name', value: 'code' }"
multiple
all-levels
check-strictly
@change="onChange"
/>
<s-list card>
<s-list-item
:title="value ? JSON.stringify(value) : '请选择'"
arrow
hover
@click="visible = true"
/>
<s-list-item
title="设置为:[[440000, 440100, 440106], [440000, 440100, 440111]] ([天河区, 白云区])"
arrow
hover
@click="
value = [
[440000, 440100, 440106],
[440000, 440100, 440111],
]
"
/>
<s-list-item title="清空" arrow hover @click="value = undefined" />
</s-list>
</template>
<script setup lang="js">
import { ref } from 'vue'
import { getRegionData } from 'region-data'
import 'sard'
const regionData = getRegionData()
const visible = ref(false)
const value = ref([
[44e4, 440100, 440106],
[44e4, 440100, 440111],
])
const onChange = (value, selectedOptions) => {
console.log('change', value, selectedOptions)
}
</script>API
CascaderPopoutProps
继承 CascaderProps 和 FormPopoutProps。
CascaderPopoutSlots
继承 CascaderSlots。
CascaderPopoutEmits
继承 MotionEmits。
| 事件 | 描述 | 类型 |
|---|---|---|
| update:visible | 弹出框显隐时触发 | (visible: boolean) => void |
| select | 选择级联选择某一项时触发 | (option: CascaderOption, tabIndex: number) => void |
| update:modelValue | 级联输入组件值改变时触发 | (value: string | number, selectedOptions: CascaderOption[]) => void |
| change | 级联输入组件值改变时触发 | (value: string | number, selectedOptions: CascaderOption[]) => void |
| confirm | 点击确定按钮时触发 | (value: string | number, selectedOptions: CascaderOption[]) => void |