zoukankan      html  css  js  c++  java
  • ant design vue级联选择懒加载省市区三级数据

    项目中原先是展示的一级数据,后面根据需求改成精确到县的。

    使用Cascader级联选择,后台返回的是获取省份的字典接口,根据codeValue一级级查询进行动态加载。

     

                    <a-form-model-item
                    prop="projectArea"
                    ref="projectArea"
                    :labelCol="{ span: 10 }"
                    :wrapperCol="{ span: 12 }"
                    label="项目部所在地:"
                    >
                        <a-tooltip>
                            <template slot="title"> 项目部所在地 </template>
                            <a-cascader
                                :allowClear="false"
                                :options="projectAreaOptions"
                                v-model="form1.projectArea"
                                placeholder="请选择区域"
                                :loadData="loadAreaData"
                                @change="onAreaChange"
                                :getPopupContainer="(trigger) => {return trigger.parentElement}">
                            </a-cascader>
                        </a-tooltip>
                    </a-form-model-item>
    

      

    async mounted() {
            this.getAppendTemplate();
            const data = await this.getAreaList() || [];
            this.projectAreaOptions = data.map(item => {
                item.leaf = false;
                return item;
            })
     }
    

      

            //获取省份数据
            getAreaList(code) {
                return new Promise((resolve, reject) => {
                    code = -1;
                    publicapi.findAllProvinceLazy(code).then(res => {
                        if (res.options) {
                            let arr = res.options.map(item => {
                                return {
                                    value: item.id,
                                    label: item.label,
                                    isLeaf: item.leaf
                                }
                            })
                            return resolve(arr)
                        } else {
                            return resolve([])
                        }
                    }).catch((err) => {
                        return reject(err)
                    })
                })
            },
            //获取下一级数据
            async loadAreaData(selectedOptions) {            
                if (!this.projectAreaOptions.length) {
                    this.projectAreaOptions = await this.getAreaList() || [];
                } else {
                    const targetOption = selectedOptions[selectedOptions.length - 1];
                    targetOption.loading = true;
                    const data = await publicapi.findAllProvinceLazy(targetOption.value);
                    console.log(data, 'targetOption.value', targetOption.value);
                    if (data.options.length) {
                        for (let index = 0; index < data.options.length; index ++) {
                            const element = data.options[index];
                            if (element.children) { delete  element.children }
                            element.value = element.id;
                            element.isLeaf = false;
                        }
                        targetOption.loading = false;
                        targetOption.children = [...data.options];                    
                        this.projectAreaOptions = JSON.parse( JSON.stringify(this.projectAreaOptions) );
                    } else {
                        targetOption.loading = false;
                        targetOption.isLeaf = true;
                    }
                }
            },
            //选择区域后的操作
            onAreaChange(val, selectedOptions) {
                console.log(val, selectedOptions, 'val, selectedOptions')
            },
    

      

    非懒加载的级联,后台一次性返回所有数据机构

    <a-cascader 
          :options="projectAreaOptions" 
          v-model="form1.projectArea"
          placeholder="请选择区域" 
          @change="onAreaChange" 
          :field-names="{label: 'label', value: 'id', children: 'children'}"
          :getPopupContainer="(trigger) => {return trigger.parentElement}"
    />
    

    使用fieldNames自定义options 中 label name children 的字段

    后台返回的数据

     

     

  • 相关阅读:
    asp.net中virtual和abstract的区别分析
    .NET中的Timer类型用法详解
    类型参数的约束(C# 编程指南)T
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    jquery的$.extend和$.fn.extend作用及区别
    类型参数约束 : Controller where T : class,new()
    asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
    字符串一级指针的内存模型图(盲点,以前自己懵懂)
    字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)
    关于内存四区和指针的修改问题
  • 原文地址:https://www.cnblogs.com/theblogs/p/15683716.html
Copyright © 2011-2022 走看看