關(guān)于VanCascader默認(rèn)值(地址code轉(zhuǎn)換)
VanCascader默認(rèn)值(地址code轉(zhuǎn)換)
我在使用VanCascader的時(shí)候,發(fā)現(xiàn)頁(yè)面刷新進(jìn)入時(shí)組件沒有默認(rèn)值,提示的是placeholder“請(qǐng)輸入地址”
我希望進(jìn)去時(shí)顯示我傳入的值
如:
- “湖北省武漢市洪山區(qū)”,(code:110101)
- 一般傳入的是code值,故希望兩者轉(zhuǎn)化
話不多說(shuō)上代碼:
<script lang="ts" setup>
import { useCascaderAreaData } from '@vant/area-data'
import type { CascaderOption } from 'vant'
const props = defineProps<{
modelValue: string
}>()
const emit = defineEmits<{
(e: 'update:modelValue', v: string): void
}>()
const show = ref(false)
interface OptionWithParents {
option: CascaderOption | null
parent: CascaderOption | null
grandparent: CascaderOption | null
}
function findOptionWithParents(options: CascaderOption[], targetValue: string, parent: CascaderOption | null, grandparent: CascaderOption | null): OptionWithParents | null {
for (const option of options) {
if (option.value === targetValue)
return { option, parent, grandparent }
if (option.children && option.children.length > 0) {
const result = findOptionWithParents(option.children, targetValue, option, parent)
if (result)
return result
}
}
return null
}
function getLabelByValue(options: CascaderOption[], targetValue: string) {
const { option, parent, grandparent } = findOptionWithParents(options, targetValue, null, null)
if (option && parent && grandparent)
return [grandparent.text, parent.text, option.text].join('/')
return ''
}
const fieldValue = ref(props.modelValue)
const options = useCascaderAreaData()
function onFinish({ selectedOptions, value }: { selectedOptions: CascaderOption[]; value: string }) {
show.value = false
fieldValue.value = selectedOptions.map(option => option.text).join('/')
emit('update:modelValue', value)
}
nextTick(() => {
fieldValue.value = getLabelByValue(options, props.modelValue)
})
</script><template>
<van-field
:model-value="fieldValue"
is-link
readonly
label="所在地區(qū)"
placeholder="選擇地區(qū)"
@click="show = true"
/>
<van-popup v-model:show="show" round position="bottom">
<van-cascader
:model-value="modelValue"
title="請(qǐng)選擇所在地區(qū)"
:options="options"
@close="show = false"
@finish="onFinish"
/>
</van-popup>
</template>接下來(lái)就是運(yùn)行結(jié)果圖:

點(diǎn)擊編輯,進(jìn)入地址編輯頁(yè)面,
如下圖所示:

有默認(rèn)值:
- 北京市/北京市/西城區(qū)了。
代碼說(shuō)明:
- 使用findOptionWithParents()獲取你傳入的modelValue值(如:”110101“)
- 獲取你所需要得到的option選項(xiàng)(’東城區(qū)‘)
- 根據(jù)option獲取父級(jí)(’北京市‘)
- 父級(jí)的父級(jí)(’北京市‘),再根據(jù)join()拼接
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 3 中使用 Element Plus 的 `el-t
在 Vue 3 中使用 Element Plus 的 `el-table` 組件實(shí)現(xiàn)自適應(yīng)高度,你可以根據(jù)容器的高度動(dòng)態(tài)設(shè)置表格的高度,下面通過示例代碼給大家展示,感興趣的朋友一起看看吧2024-12-12
vue+echarts實(shí)現(xiàn)動(dòng)態(tài)折線圖的方法與注意
這篇文章主要給大家介紹了關(guān)于vue+echarts實(shí)現(xiàn)動(dòng)態(tài)折線圖的方法與注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
vue+vant移動(dòng)端顯示table表格加橫向滾動(dòng)條效果
vant移動(dòng)端顯示table效果,增加復(fù)選框,可以進(jìn)行多選和全選,加橫向滾動(dòng)條,可以看全部?jī)?nèi)容,下面通過本文給大家分享vue+vant移動(dòng)端顯示table表格加橫向滾動(dòng)條效果,感興趣的朋友跟隨小編一起看看吧2024-06-06
構(gòu)建大型 Vue.js 項(xiàng)目的10條建議(小結(jié))
這篇文章主要介紹了構(gòu)建大型 Vue.js 項(xiàng)目的10條建議(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
vue+element實(shí)現(xiàn)動(dòng)態(tài)加載表單
這篇文章主要為大家詳細(xì)介紹了vue+element實(shí)現(xiàn)動(dòng)態(tài)加載表單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法
NProgress.js是輕量級(jí)的進(jìn)度條組件,使用簡(jiǎn)便,可以很方便集成到單頁(yè)面應(yīng)用中。這篇文章主要介紹了在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法,需要的朋友可以參考下2018-01-01
vue中el-tree結(jié)合el-switch實(shí)現(xiàn)開關(guān)狀態(tài)切換
本文主要介紹了vue中el-tree結(jié)合el-switch實(shí)現(xiàn)開關(guān)狀態(tài)切換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12

