element Cascader懒加载,由数据导致的回显问题

1、今天在做一个城市选择的model时候发现了一个问题记录一下。

(1)、我们先看非懒加载的方式

                <el-form-item label="发货地址" required>
                  <el-cascader v-model="modelInfo.sendCityObj" :options="modelInfo.sendCityOptions" size="mini"
                    @change="handleChangeCity" clearable></el-cascader>
                </el-form-item>
        sendCityObj:[1,1,1],
        sendCityOptions: [
          {label: '1111', value: 1, children: [{label: '1111', value: 1, children:[{label: '1111', value: 1}]}]},
          { label: '2222', value: 2, children: [{}] },
          { label: '3333', value: 3, children: [{}] },
        ],

这是非懒加载的模式下sendCityObj:[1,1,1]这种多层级值相同是可以回显的。但是这种在懒加载的情况下就有问题了。

(2)、动态懒加载的方式

                  <el-cascader  :props="modelInfo.xzProps" v-model="modelInfo.cityObj"
                    :options="modelInfo.cityOptions" size="mini" @change="handleChangeCity" clearable></el-cascader>
                </el-form-item>
        xzProps: {
          label: 'label',
          value: 'value',
          code: 'code',
          checkStrictly: true,
          lazy: true, //设置lazyLoad,必须配合lazy:true
          checkStrictly: true,
          lazyLoad: this.lazyLoadXzqh,
        },
        cityOptions: [],//城市下拉框
                async lazyLoadXzqh(node, resolve) {
                    console.log(node)//这里输出懒加载的node
                    let options = []
                    if (node.level == 0) {
                      await axios.get(`https://tools.canqu.com.cn/api/province/query`).then(response => {
                        if (response.data) {
                          response.data.forEach(item => {
                            let node = ({ label: item.Name, value: item.Id, code: item.Code});
                            options.push(node);
                          });
                        }
                      }).catch(err => {
                      });
                    }
                    if (node.level == 1) {
                       await axios.get(`https://tools.canqu.com.cn/api/city/queryByProvinceId?provinceId=${node.value}`).then(response => {
                        if (response.data) {
                          response.data.forEach(item => {
                            let node = { label: item.Name, value: item.Id, code: item.Code }
                            options.push(node);
                          });
                        }
                      }).catch(err => {
                      });
                    }
                    if (node.level == 2) {
                      await axios.get(`https://tools.canqu.com.cn/api/county/getByCity?cityId=${node.value}`).then(response => {
                        if (response.data) {
                          response.data.forEach(item => {
                            let node = { label: item.Name, value: item.Id, code: item.Code,leaf:true }
                            options.push(node);
                          });
                        }
                      }).catch(err => {
                      });
                    }
                    resolve(options);
                },

(3)这种动态加载的时候,有时候城市的多层级ID是相同的,如北京市-北京市-双桥区,返回的id是[1,1,1]。但是会默认回显的时候它显示不出来。

我通过观察它输出的node信息发现他调用了三次,第一次是一级目录的初始化,在初始化二级和三级目录的时候后两次的层级都是1,第三次的层级应该是2。就是因为这种原因倒是回显不出来。

这种情况只在动态懒加载的时候会出现这种问题。因为有些城市接口返回的层级id有可能是相同的。

注意:这时候我们要手动处理一下接口返回给我们的城市ID。

这个问题也是耽搁了一会儿时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值