关于VanCascader默认值(地址code转换)

 更新时间:2024年07月02日 09:11:09   作者:不是LIsa.  
这篇文章主要介绍了关于VanCascader默认值(地址code转换),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

VanCascader默认值(地址code转换)

我在使用VanCascader的时候,发现页面刷新进入时组件没有默认值,提示的是placeholder“请输入地址”

我希望进去时显示我传入的值

如:

  • “湖北省武汉市洪山区”,(code:110101)
  • 一般传入的是code值,故希望两者转化

话不多说上代码:

<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="所在地区"
    placeholder="选择地区"
    @click="show = true"
  />
  <van-popup v-model:show="show" round position="bottom">
    <van-cascader
      :model-value="modelValue"
      title="请选择所在地区"
      :options="options"
      @close="show = false"
      @finish="onFinish"
    />
  </van-popup>
</template>

接下来就是运行结果图:

点击编辑,进入地址编辑页面,

如下图所示:

有默认值:

  • 北京市/北京市/西城区了。

代码说明:

  • 使用findOptionWithParents()获取你传入的modelValue值(如:”110101“)
  • 获取你所需要得到的option选项(’东城区‘)
  • 根据option获取父级(’北京市‘)
  • 父级的父级(’北京市‘),再根据join()拼接

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue 3 中使用 Element Plus 的 `el-table` 组件实现自适应高度

    Vue 3 中使用 Element Plus 的 `el-t

    在 Vue 3 中使用 Element Plus 的 `el-table` 组件实现自适应高度,你可以根据容器的高度动态设置表格的高度,下面通过示例代码给大家展示,感兴趣的朋友一起看看吧
    2024-12-12
  • vue watch监听方法总结

    vue watch监听方法总结

    这篇文章主要给大家分享的是vue watch监听方法总结,侦听器一般来说是用来监听数据的变化,默认是在数据发生变化时执行。监听的数据名放到这里面作为函数名,这个函数里面有两个参数,一个是新值,一个是旧值。下面我们就一起进入文章了解更具体的内容吧
    2021-12-12
  • vue+echarts实现动态折线图的方法与注意

    vue+echarts实现动态折线图的方法与注意

    这篇文章主要给大家介绍了关于vue+echarts实现动态折线图的方法与注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • vue+vant移动端显示table表格加横向滚动条效果

    vue+vant移动端显示table表格加横向滚动条效果

    vant移动端显示table效果,增加复选框,可以进行多选和全选,加横向滚动条,可以看全部内容,下面通过本文给大家分享vue+vant移动端显示table表格加横向滚动条效果,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • vue3中虚拟dom的介绍与使用详解

    vue3中虚拟dom的介绍与使用详解

    Vue 是如何将一份模板转换为真实的 DOM 节点的,又是如何高效地更新这些节点的呢,这些都离不开虚拟dom这个概念,下面我们就来了解下虚拟dom这个概念以及它是什么吧
    2024-01-01
  • Vue集成百度地图实现位置选择功能

    Vue集成百度地图实现位置选择功能

    由于添加门店时,需要选择门店的省、市、区、详细地址、以及门店的经纬度信息,本文给大家分享Vue集成百度地图实现位置选择功能,感兴趣的朋友一起看看吧
    2022-06-06
  • 构建大型 Vue.js 项目的10条建议(小结)

    构建大型 Vue.js 项目的10条建议(小结)

    这篇文章主要介绍了构建大型 Vue.js 项目的10条建议(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • vue+element实现动态加载表单

    vue+element实现动态加载表单

    这篇文章主要为大家详细介绍了vue+element实现动态加载表单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 在vue项目中使用Nprogress.js进度条的方法

    在vue项目中使用Nprogress.js进度条的方法

    NProgress.js是轻量级的进度条组件,使用简便,可以很方便集成到单页面应用中。这篇文章主要介绍了在vue项目中使用Nprogress.js进度条的方法,需要的朋友可以参考下
    2018-01-01
  • vue中el-tree结合el-switch实现开关状态切换

    vue中el-tree结合el-switch实现开关状态切换

    本文主要介绍了vue中el-tree结合el-switch实现开关状态切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12

最新评论