关于el-cascader省市区动态加载的使用以及获取label值和编辑时的回显问题

背景:

为什么使用级联选择器动态加载节点,因为一次性加载全部节点耗费性能。但是使用el-cascader组件会有很多坑,分享一下给大家避避坑。

使用
<el-cascader ref="cas" v-model="areaArr" @change="change" :props="props" :key="modalKey"></el-cascader>

因为使用动态加载节点,所以不需要options属性

 data() {
   return {
    areaArr:[],
    modalKey: 0,
    props: {
        lazy: true,
        lazyLoad(node, resolve) {
          const { value = 0 } = node;
          setTimeout(async () => {
            const nodes = await getArea(value);  //getArea方法是请求节点数据接口的方法
            const childNodes = nodes.data.body.map((item) => ({
              value: item["areaCode"],
              label: item["areaName"],
              leaf: item["level"] >= 3,
            }));
            resolve(childNodes);
          });
        },
      },
    },
 }

首先设置lazy为true,然后使用lazyLoad方法获取节点,lazyLoad方法有两个参数,第一个参数node是当前选中的节点,第二个参数resolve是回调函数,通过传入value值获取子节点列表并通过resolve回调抛出。
这里面为什么在解构node时要给value设默认值为0,因为不设置默认值的话getArea方法第一次请求相当于传了空值,会导致下拉框没有选项。
leaf是叶子节点的标志位,用来控制是否还展示叶子节点。

获取label值
 methods: {
 //change方法在节点值发生变化时触发,nodes参数为选中的节点值
    change(nodes) {
        let areaName = this.$refs.cas.getCheckedNodes()[0].pathLabels
        console.log(areaName)
    },
关于编辑时的回显问题

如果获取详情后直接给v-model绑定的areaArr赋值的话,会发现选择器没有显示数据,有时得点击选择器才能显示数据(不知道为什么),此时需要我们给选择器绑定一个:key,默认值设为0,然后在获取到数据后this.modalKey++

this.areaArr = ['10','1010','101010']
this.modalKey ++;

此时在获取到数据后通过增加key值使选择器重新渲染,数据就能回显出来啦,但是会有一点小小的延迟,不过问题不大。
在其他的帖子里看到数据没有回显是因为没有options值,我没有试过,因为太繁琐。
还有设置定时器让获取数据后渲染组件,跟设置:key是一个意思。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值