vuecssuiant-designantdreactantantd-vueenterprisefrontendui-designvue-antdvue-antd-uivue3vuecomponent
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.3 KiB
68 lines
1.3 KiB
<docs> |
|
--- |
|
order: 9 |
|
title: |
|
zh-CN: 动态加载选项 |
|
en-US: Load Options Lazily |
|
--- |
|
|
|
## zh-CN |
|
|
|
使用 `loadData` 实现动态加载选项。 |
|
> 注意:`loadData` 与 `showSearch` 无法一起使用。 |
|
|
|
## en-US |
|
|
|
Load options lazily with `loadData`. |
|
> Note: `loadData` cannot work with `showSearch`. |
|
|
|
</docs> |
|
<template> |
|
<a-cascader |
|
v-model:value="value" |
|
:options="options" |
|
:load-data="loadData" |
|
placeholder="Please select" |
|
change-on-select |
|
/> |
|
</template> |
|
<script lang="ts" setup> |
|
import { ref } from 'vue'; |
|
import type { CascaderProps } from 'ant-design-vue'; |
|
|
|
const options = ref<CascaderProps['options']>([ |
|
{ |
|
value: 'zhejiang', |
|
label: 'Zhejiang', |
|
isLeaf: false, |
|
}, |
|
{ |
|
value: 'jiangsu', |
|
label: 'Jiangsu', |
|
isLeaf: false, |
|
}, |
|
]); |
|
|
|
const loadData: CascaderProps['loadData'] = selectedOptions => { |
|
const targetOption = selectedOptions[selectedOptions.length - 1]; |
|
targetOption.loading = true; |
|
|
|
// load options lazily |
|
setTimeout(() => { |
|
targetOption.loading = false; |
|
targetOption.children = [ |
|
{ |
|
label: `${targetOption.label} Dynamic 1`, |
|
value: 'dynamic1', |
|
}, |
|
{ |
|
label: `${targetOption.label} Dynamic 2`, |
|
value: 'dynamic2', |
|
}, |
|
]; |
|
options.value = [...options.value]; |
|
}, 1000); |
|
}; |
|
|
|
const value = ref<string[]>([]); |
|
</script>
|
|
|