Vue(二十八)el-cascader 动态加载 - 省市区组件

本文介绍了一种使用Vue.js和Element UI实现省市区级联选择器的方法,通过后台接口动态加载数据,实现了点击加载下一级的功能。文章详细展示了如何设置v-model、props属性以及监听active-item-change事件来更新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.后台接口为点击加载下一级 ,传省市区id

<template>
  <el-cascader
    v-model="selectedOptions"
    placeholder="请选择省市区"
    :options="cascaderData"
    @active-item-change="handleItemChange"
    :props="{
      value: 'id',
      label: 'name',
      children: 'cities'
    }"
  ></el-cascader>
</template>

<script>
export default {
  name: 'my-provinces',
  data () {
    return {
      departmentOptions: [],
      cascaderData: [],
      selectedOptions: []
    }
  },
  methods: {
    getNodes (val) {
      let idArea
      let sizeArea
      if (!val) {
        idArea = null
        sizeArea = 0
      } else if (val.length === 1) {
        idArea = val[0]
        sizeArea = val.length // 3:一级 4:二级 6:三级
      } else if (val.length === 2) {
        idArea = val[1]
        sizeArea = val.length // 3:一级 4:二级 6:三级
      }
      this.$post('ibest/service/system/area/areaList', {
        'id': idArea
      }).then(response => {
        if (response.data && response.data.code === '00000000') {
          let Items = response.data.data
          if (sizeArea === 0) { // 初始化 加载一级 省
            this.cascaderData = Items.map((value, i) => {
              return {
                id: value.id,
                name: value.name,
                cities: []
              }
            })
          } else if (sizeArea === 1) { // 点击一级 加载二级 市
            this.cascaderData.map((value, i) => {
              if (value.id === val[0]) {
                if (!value.cities.length) {
                  value.cities = Items.map((value, i) => {
                    return {
                      id: value.id,
                      name: value.name,
                      cities: []
                    }
                  })
                }
              }
            })
          } else if (sizeArea === 2) { // 点击二级 加载三级 区
            this.cascaderData.map((value, i) => {
              if (value.id === val[0]) {
                value.cities.map((value, i) => {
                  if (value.id === val[1]) {
                    if (!value.cities.length) {
                      value.cities = Items.map((value, i) => {
                        return {
                          id: value.id,
                          name: value.name
                        }
                      })
                    }
                  }
                })
              }
            })
          }
        } else {
          console.log(response.data.msg)
        }
      }, error => {
        console.log(error)
      })
    },
    handleItemChange (val) {
      this.getNodes(val)
    }
  },
  mounted () {
    this.getNodes()
  }
}
</script>

2.效果

 

转载于:https://www.cnblogs.com/yulingjia/p/9789174.html

el-cascader动态加载数据可以通过设置isLeaf属性来实现。在el-cascader组件中,可以通过props属性来配置数据的一些属性,其中包括isLeaf属性。isLeaf属性用来判断节点是否为叶子节点,即没有子节点。通过设置isLeaf属性为true或false,可以动态加载节点的子节点。 在代码中,可以使用loadNode方法来加载节点的子节点。loadNode方法接收两个参数,第一个参数是当前节点,第二个参数是一个回函数resolve。在loadNode方法中,可以根据当前节点的信息来获取对应的子节点数据,并通过用resolve方法将子节点数据传递给el-cascader组件,从而实现动态加载节点的功能。 在获取到数据后,为了实时更新el-cascader组件的显示,可以通过给el-cascader组件设置一个key值来触发组件的重新渲染。这样就能实现动态加载数据后的节点回显。可以使用定时器或者设置:key属性来实现重新渲染组件的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [关于el-cascader省市区动态加载的使用以及获取label值和编辑时的回显问题](https://blog.youkuaiyun.com/qq_53755493/article/details/127868836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue+element树组件 实现树懒加载的过程详解](https://download.youkuaiyun.com/download/weixin_38648309/13982815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值