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

Posted yulingjia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue(二十八)el-cascader 动态加载 - 省市区组件相关的知识,希望对你有一定的参考价值。

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.效果

技术分享图片

 

以上是关于Vue(二十八)el-cascader 动态加载 - 省市区组件的主要内容,如果未能解决你的问题,请参考以下文章

第二十八篇 vue

Vue 教程(二十八)webpack 使用 css 文件

跨平台应用开发进阶(二十八) :资源加载速度优化解决方案

Vue学习—Vue UI组件库(二十八)

Vue学习—Vue UI组件库(二十八)

Python学习二十八周(vue.js)